-
-
[求助]请问我这段代码可有错误
-
发表于: 2011-7-11 15:34 3661
-
NTSTATUS MyNtUserBuildHwndList( IN HDESK hdesk, IN HWND hwndNext, IN ULONG fEnumChildren, IN DWORD idThread, IN UINT cHwndMax, OUT HWND *phwndFirst, OUT ULONG* pcHwndNeeded) { NTSTATUS status,status_GetClassName; int i=0; //句柄总数 UNICODE_STRING str; //存放窗口类名 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ PVOID Base=NULL; ULONG sz=sizeof(WCHAR)*80; NTSTATUS st=ZwAllocateVirtualMemory(NtCurrentProcess(),&Base,0,&sz, MEM_COMMIT, PAGE_READWRITE); KdPrint(("status= %08X 申请的地址= %08X \n",st,Base)); __try { KdPrint(("进入try块 \n")); ProbeForWrite(Base,4,4); ProbeForRead(Base,4,4); } __except(EXCEPTION_EXECUTE_HANDLER) { KdPrint(("出现异常 地址不可读写 \n")); } str.Buffer=(PWSTR)Base; //参数3 str.Length=sz; //+++++++++++++++++++++++++++++++++++++++ status=Org_NtUserBuildHwndList(hdesk,hwndNext,fEnumChildren, idThread,cHwndMax,phwndFirst,pcHwndNeeded); //调用原始函数 if (status==STATUS_SUCCESS) { while (i < * pcHwndNeeded) { status_GetClassName=MyNtUserGetClassName(phwndFirst[i],TRUE,&str); if (NT_SUCCESS(status_GetClassName)) { KdPrint(("获取 窗口类名 = %S \n",str.Buffer)); } i++; } } SIZE_T size0=0; st=ZwFreeVirtualMemory(NtCurrentProcess(),&Base,&size0,MEM_RELEASE); if (!NT_SUCCESS(st)) { KdPrint(("释放内存失败 \n")); } return status; }
我用这个函数替换了影子表中的NtUserBuildHwndList
但是调用NtUserGetClassName 后
输出
获取 窗口类名 =
看不到窗口类名
赞赏
他的文章
- [调查]请问这本书是 北极星版主 写的么 13434
- [求助]请问互斥体支持多cpu的同步吗 4378
- [求助]请问关于一个内核定时器的问题 3032
- [求助]遇到了1个内核I/O定时器例程的问题 4663
看原图
赞赏
雪币:
留言: