首页
社区
课程
招聘
[求助]如何去查看一个进程的所有句柄
发表于: 2011-8-13 16:03 14682

[求助]如何去查看一个进程的所有句柄

2011-8-13 16:03
14682
我在使用xuetr的一个功能查看进程句柄

不知道如何去实现呢


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 27
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
HANDLE GetProcessKernelObject(DWORD ProcessId)
{

HMODULE hNtDll = NULL;
ZWQUERYSYSTEMINFORMATION pfnZwQuerySystemInformation = NULL;
NTQUERYOBJECT pfnNtQueryObject = NULL;
PSYSTEM_HANDLE_INFORMATION pSysHandleInfo = NULL;
POBJECT_ALL_INFORMATION pAllInfo =NULL;
POBJECT_NAME_INFORMATION pNameInfo = NULL;

ULONG nNumberHandle =0;
NTSTATUS ntStatus = 0;
ULONG ulSize,ulCount;
char cBuffer[0x80000],cInfoBuffer[0x10000];

hNtDll = GetModuleHandle(TEXT("ntdll.dll"));
pfnZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(hNtDll,"ZwQuerySystemInformation");
pfnNtQueryObject = (NTQUERYOBJECT)GetProcAddress(hNtDll,"NtQueryObject");

ntStatus = pfnZwQuerySystemInformation(SystemHandleInformation,cBuffer,0x80000,&ulSize);

if(NT_SUCCESS(ntStatus))
{
DWORD n = ulSize/sizeof(SYSTEM_HANDLE_INFORMATION);
nNumberHandle = *(PULONG)cBuffer;
pSysHandleInfo = (PSYSTEM_HANDLE_INFORMATION)(cBuffer +4);
ulCount = 0;

for(ULONG i=0;i!=nNumberHandle;++i)
{

if(pSysHandleInfo.ProcessId != ProcessId)
continue;

ntStatus = pfnNtQueryObject((HANDLE)pSysHandleInfo.Handle,ObjectAllInformation,cInfoBuffer,0x10000,&ulSize);
ntStatus = pfnNtQueryObject((HANDLE)pSysHandleInfo.Handle,ObjectNameInformation,cInfoBuffer,0x10000,&ulSize);
if(NT_SUCCESS(ntStatus))
{
pAllInfo = (POBJECT_ALL_INFORMATION)cInfoBuffer;
pNameInfo = (POBJECT_NAME_INFORMATION)cInfoBuffer;
if(_tcsstr(pNameInfo->NameBuffer,TEXT("QQGame_Mutex")) !=NULL)
{
return (HWND)pSysHandleInfo.Handle;
}
}
}
}
return NULL;
}

这是以前写的 多开QQ游戏大厅的代码,其中遍历了所有句柄
2011-8-13 16:31
0
雪    币: 345
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢我看看。。。。
2011-8-13 16:44
0
雪    币: 345
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好多声明我都找不到   可以提供个完整的吗
2011-8-13 16:51
0
雪    币: 27
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
http://topic.csdn.net/u/20100209/19/a03246ff-8cf7-42dc-abec-97a4b2386a72.html
2011-8-13 17:20
0
雪    币: 345
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我用NtQuerySystemInformation 获取了但是无法得到句柄的名称



求获取句柄名称代码

//                                 ntStatus = pfnNtQueryObject((HANDLE)pSHinfo->Handles[dwIdx].Handle,ObjectNameInformation,cInfoBuffer,1024,&ulSize);
//                                 if(NT_SUCCESS(ntStatus))
//                                 {
//                                        
//                                         pNameInfo = (POBJECT_NAME_INFORMATION)cInfoBuffer;
//                                        
//                                         printf("%s\n",pNameInfo->Name);
//                                 }
上传的附件:
2011-8-13 18:49
0
雪    币: 2271
活跃值: (2160)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
7
根据句柄得到相应的对象,再在对象目录中查找相应的名称即可。
2011-8-14 12:06
0
雪    币: 345
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
得到句柄名必须要打开相应的进程吗    如何去关闭他   这些ring3下是否可以实现
2011-8-14 14:16
0
游客
登录 | 注册 方可回帖
返回
//