首页
社区
课程
招聘
[求助]NtQueryObject获得句柄名称的问题
发表于: 2012-12-9 10:26 7577

[求助]NtQueryObject获得句柄名称的问题

2012-12-9 10:26
7577
ntStatus = ZwQuerySystemInformation(SystemHandleInformation,cBuffer,0xE0000,&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,ObjectNameInformation,cInfoBuffer,0x10000,&ulSize);
                        if(NT_SUCCESS(ntStatus))
                        {
                                pNameInfo = (POBJECT_NAME_INFORMATION)cInfoBuffer;

                                if(_tcsstr(pNameInfo->Name.Buffer,TEXT("QQGame_Mutex")) !=NULL)
                                {
                                        return (HWND)pSysHandleInfo->Handle;
                                }
                        }
                }
        }

学习的是这个代码,遍历出了名称,但是发现遍历出的名称全部都和System进程的一样,每个进程的句柄原来都是那么几个,4/8/C/10....
比如System的Handle=30=名称"\REGISTRY\MACHINE",其他进程的Handle=30=取得的名称也是"\REGISTRY\MACHINE"
但是Xuetr中看到的句柄名称是不一样的,是这个代码使用中还有什么需要注意的地方吗?

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 137
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
貌似 有个调试器编写的视频课程里面讲到了怎么转换的
2012-12-9 13:20
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
3
楼主,这是最基本的东西,句柄是进程内的……你每次都是查自己进程的句柄当然一样了,要先复制过来滴
2012-12-9 13:39
0
雪    币: 376
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
额……
找了一下资料,如果句柄不是自身进程的,需要先DuplicateHandle复制后才可以读取,关闭的时候也是用DuplicateHandle+DUPLICATE_CLOSE_SOURCE
不知道是否准确,这是我暂时测试出的结果了
多谢LS二位指点
2012-12-9 21:02
0
游客
登录 | 注册 方可回帖
返回
//