阅读:1131回复:4
怎么简单的几句话,就是不对,各位看看ZwQuerySystemInformation调用正确否
struct _SYSTEM_PROCESSES
{ ULONG NextEntryDelta; ULONG ThreadCount; ULONG Reserved[6]; LARGE_INTEGER CreateTime; LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; KPRIORITY BasePriority; ULONG ProcessId; ULONG InheritedFromProcessId; ULONG HandleCount; ULONG Reserved2[2]; VM_COUNTERS VmCounters; IO_COUNTERS IoCounters; //windows 2000 only struct _SYSTEM_THREADS Threads[1]; }SYSTEM_PROCESSES, *PSYSTEM_PROCESSES; ULONG Ret; PSYSTEM_PROCESSES pTmp; NTSTATUS ntStatus; pTmp = ExAllocatePool(PagedPool, sizeof(SYSTEM_PROCESSES) * 1024); if(pTmp != NULL) { ntStatus = ZwQuerySystemInformation(0x5, pTmp, sizeof(SYSTEM_PROCESSES) * 1024, &Ret); } ntStatus是0xC0000005访问非法区域,pTmp是非空啊,要是大小不够应该报0xC0000004才对,试过加大10240还是不对。各位,要不是还有很Easy的错误我没看出来,啊,被鬼迷眼了啊? [编辑 - 12/18/04 by pwpwpw123] [编辑 - 12/20/04 by pwpwpw123] |
|
沙发#
发布于:2004-12-20 09:07
周六日大伙都不在啊,自己顶一下
|
|
板凳#
发布于:2004-12-20 11:11
SYSTEM_PROCESSES 结构体的大小是不定的,sizeof()不管用。
调用ZwQuerySystemInformation(5,NULL,0,&LengthReturn) 然后用LengthReturn来分配堆。 |
|
地板#
发布于:2004-12-22 08:55
不是啊,SYSTEM_PROCESS大小是固定的,而且你讲述的方法就是我一早使用的,没有用,第一次调用就报0xc0000005错,ReturnLength的值就是初始值
|
|
地下室#
发布于:2004-12-22 21:54
同意Odyssey
|
|