赞
踩
使用ZwQuerySystemInformation函数查询SystemModuleInformation
在看到两种用法
第一种:
ZwQuerySystemInformation(SystemModuleInformation,&n,0,&n);
PULONG p=new ULONG[n];
ZwQuerySystemInformation(SystemModuleInformation,p,n*sizeof*p,0);
第二种:
ZwQuerySystemInformation(SystemModuleInformation,&n,0,&n);
buf = (PULONG)ExAllocatePool(PagedPool,n);
ZwQuerySystemInformation(SystemModuleInformation,buf, n , 0);
如果n表示返回信息的字节数的话,
那么在第一种中分配的是n*4个字节的空间
PSYSTEM_MODULE_INFORMATION头4个字节dwNumberOfModules指示有多少个模块
( PULONG )buf + 1也没有指向第二个模块,只不过是指针向后移了4个字节
typedef struct _SYSTEM_MODULE_INFORMATION {//Information Class 11
ULONG Reserved [2];
PVOID Base;
ULONG Size;
ULONG Flags;
USHORT Index;
USHORT Unknown;
USHORT LoadCount;
USHORT ModuleNameOffset;
CHAR ImageName [256 ];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
typedef struct {
ULONG dwNumberOfModules;
SYSTEM_MODULE_INFORMATION smi;
} MODULES, *PMODULES;
这里的PMODULES就是代码中的PSYSTEM_MODULE_INFORMATION
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。