PsLoadedModuleList是Windows加载的所有内核模块构成的链表的表头,利用它可以枚举所有这些模块的信息,下面是WRK中对PsLoadedModuleList的定义:LIST_ENTRY PsLoadedModuleList;
内核在加载驱动时,会为每一个驱动创建一个驱动对象(DRIVER_OBJECT),下面是驱动对象的数据结构:
typedef struct _DRIVER_OBJECT {
CSHORT Type;
CSHORTSize;
PDEVICE_OBJECT DeviceObject; //指向设备对象,所有的设备对象构成一个链表
ULONGFlags; //驱动程序标志
PVOIDDriverStart; //驱动程序映像起始地址
ULONGDriverSize; //驱动程序映像大小
PVOIDDriverSection; //指向驱动程序映像的内存区对象
PDRIVER_EXTENSIONDriverExtension; //指向驱动程序对象的扩展部分
UNICODE_STRINGDriverName; //驱动程序名称
PUNICODE_STRINGHardwareDatabase; //指向注册表中包含硬件信息的路径
PFAST_IO_DISPATCHFastIoDispatch; //指向快速I/O的分发结构
PDRIVER_INITIALIZE DriverInit; //驱动程序的初始化例程
PDRIVER_STARTIO DriverStartIo; //驱动程序的启动I/O例程
PDRIVER_UNLOADDriverUnload; //驱动程序的卸载例程
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
} DRIVER_OBJECT;
typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
DRIVER_OBJECT对象的DriverExtension成员指向的是驱动程序映像的内存区对象,它的结构KLDR_DATA_TABLE_ENTRY的定义是:
typedef struct_KLDR_DATA_TABLE_ENTRY