typedef struct _LDR_DATA_TABLE_ENTRY { I/O管理器在装载驱动时,首先调用IopLoadDriver()函数,该函数执行一下功能 1. 确定要装载的驱动名称,查询该驱动是否已经被装载。系统中包含一个已经装载的驱动链表,I/O管理器是通过查询这个链表确定驱动是否被装载的,如果已经被装载,则返回成功;另外注册表中也必须配置相关的信息 2. 如果驱动没有被装载,I/O管理器请求虚拟存储管理器(VMM)将驱动可执行文件映射到内存中,VMM在映射时检查该文件是否为可用的PE格式,如果不是,VMM使请求失败,驱动装载失败 3. I/O管理器通过对象管理器创建驱动对象,该驱动对象存储在非分页内存池中,因此任意IRQL都可以访问 4. I/O管理器将驱动对象结构清零,MajorFunction中的每一个元素被设置为IopInvalidDeiviceRequest()。该函数仅仅返回STATUS_INVALID_DEVICE_REQUEST状态码 5. I/O管理器将DriverInit字段设置为驱动的入口程序(DriverEntry),DriverSection被初始化为驱动的Section对 象指针,该section对象指向驱动的可执行文件;DriverStart设置为驱动映像的基址;DriverSize被设置为驱动映像的尺寸。 6. I/O管理器将该驱动对象插到 NT Object Manager维护的驱动列表中 7. HardwareDatabase字段初始化为Configuration Manager的硬件配置信息。底层驱动可以使用这个字段决定驱动启动顺序的配置;DriverName也被初始化,这样错误记录服务可以记录相关的信息 8. I/O 管理器调用驱动初始化程序。该初始化程序总是在系统进程中IRQL_PASSIVE_LEVEL级别被调用。 |
通过DriverSection链表遍历系统模块
GetImageBase_M proc
LOCAL LinkHead:ULONG
LOCAL FileName:UNICODE_STRING
;;eax = DRIVER_OBJECT->DriverSection
mov eax,pDrvObj
mov eax,[eax+14h]
;; 遍历LDR_DATA_TABLE_ENTRY->InLoadOrderLinks链表
mov LinkHead,eax
mov ebx,[eax] ;; eax=eax->Flink
.while ebx != LinkHead
mov esi,ebx
add esi,24h
assume esi:ptr UNICODE_STRING
invoke DbgPrint,$CTA0("\n---%ws\n"), [esi].Buffer
mov ebx,[ebx] ;; eax=eax->Flink
.endw
ret
GetImageBase_M endp
以下是显示结果:
---(null)
---\WINDOWS\system32\ntkrnlpa.exe
---\WINDOWS\system32\hal.dll
---\WINDOWS\system32\KDCOM.DLL
---\WINDOWS\system32\BOOTVID.dll
---ACPI.sys
---\WINDOWS\system32\DRIVERS\WMILIB.SYS
---pci.sys
---isapnp.sys
---compbatt.sys
---\WINDOWS\system32\DRIVERS\BATTC.SYS
---pciide.sys
---\WINDOWS\system32\DRIVERS\PCIIDEX.SYS
---intelide.sys
---MountMgr.sys
---ftdisk.sys
---dmload.sys
---dmio.sys
---PartMgr.sys
---ACPIEC.sys
---\WINDOWS\System32\DRIVERS\OPRGHDLR.SYS
---nvrd32.sys
---\WINDOWS\system32\DRIVERS\CLASSPNP.SYS
---VolSnap.sys
---atapi.sys
---iastor7.sys
---vmscsi.sys
---\WINDOWS\system32\DRIVERS\SCSIPORT.SYS
---viamraid.sys
---disk.sys
---fltMgr.sys
---KSecDD.sys
---usbohci.sys
---\WINDOWS\system32\DRIVERS\USBPORT.SYS
---mouhid.sys
---\WINDOWS\system32\DRIVERS\HIDPARSE.SYS
---kbdhid.sys
---Ntfs.sys
---NDIS.sys
---hidusb.sys
---\WINDOWS\system32\DRIVERS\HIDCLASS.SYS
---\WINDOWS\system32\DRIVERS\USBD.SYS
---RsNTGdi.sys
---Mup.sys
---agp440.sys
---\SystemRoot\system32\DRIVERS\intelppm.sys
---\SystemRoot\system32\DRIVERS\i8042prt.sys
---\SystemRoot\system32\DRIVERS\kbdclass.sys
---\SystemRoot\system32\DRIVERS\vmmouse.sys
---\SystemRoot\system32\DRIVERS\mouclass.sys
---\SystemRoot\system32\DRIVERS\parport.sys
---\SystemRoot\system32\DRIVERS\serial.sys
---\SystemRoot\system32\DRIVERS\serenum.sys
---\SystemRoot\system32\DRIVERS\fdc.sys
---\SystemRoot\system32\DRIVERS\cdrom.sys
---\SystemRoot\system32\DRIVERS\redbook.sys
---\SystemRoot\system32\DRIVERS\ks.sys
---\SystemRoot\system32\DRIVERS\usbuhci.sys
---\SystemRoot\system32\DRIVERS\vmx_svga.sys
---\SystemRoot\system32\DRIVERS\VIDEOPRT.SYS
---\SystemRoot\system32\DRIVERS\vmxnet.sys
---\SystemRoot\system32\drivers\es1371mp.sys
---\SystemRoot\system32\drivers\portcls.sys
---\SystemRoot\system32\drivers\drmk.sys
---\SystemRoot\system32\DRIVERS\usbehci.sys
---\SystemRoot\system32\DRIVERS\CmBatt.sys
---\SystemRoot\system32\DRIVERS\fsvga.sys
---\SystemRoot\system32\DRIVERS\audstub.sys
---\SystemRoot\system32\DRIVERS\rasl2tp.sys
---\SystemRoot\system32\DRIVERS\ndistapi.sys
---\SystemRoot\system32\DRIVERS\ndiswan.sys
---\SystemRoot\system32\DRIVERS\raspppoe.sys
---\SystemRoot\system32\DRIVERS\raspptp.sys
---\SystemRoot\system32\DRIVERS\TDI.SYS
---\SystemRoot\system32\DRIVERS\psched.sys
---\SystemRoot\system32\DRIVERS\msgpc.sys
---\SystemRoot\system32\DRIVERS\ptilink.sys
---\SystemRoot\system32\DRIVERS\raspti.sys
---\SystemRoot\system32\DRIVERS\rdpdr.sys
---\SystemRoot\system32\DRIVERS\termdd.sys
---\SystemRoot\system32\DRIVERS\swenum.sys
---\SystemRoot\system32\DRIVERS\update.sys
---\SystemRoot\system32\DRIVERS\mssmbios.sys
---\SystemRoot\system32\DRIVERS\usbhub.sys
---\SystemRoot\System32\Drivers\NDProxy.SYS
---\SystemRoot\system32\DRIVERS\gameenum.sys
---\SystemRoot\System32\Drivers\Fs_Rec.SYS
---\SystemRoot\System32\Drivers\Null.SYS
---\SystemRoot\System32\Drivers\Beep.SYS
---\SystemRoot\System32\drivers\vga.sys
---\SystemRoot\System32\Drivers\mnmdd.SYS
---\SystemRoot\System32\DRIVERS\RDPCDD.sys
---\SystemRoot\System32\Drivers\Msfs.SYS
---\SystemRoot\System32\Drivers\Npfs.SYS
---\SystemRoot\system32\DRIVERS\rasacd.sys
---\SystemRoot\system32\DRIVERS\ipsec.sys
---\SystemRoot\system32\DRIVERS\tcpip.sys
---\SystemRoot\system32\DRIVERS\ipnat.sys
---\SystemRoot\system32\DRIVERS\netbt.sys
---\SystemRoot\system32\DRIVERS\wanarp.sys
---\SystemRoot\System32\drivers\afd.sys
---\SystemRoot\system32\DRIVERS\netbios.sys
---\??\C:\WINDOWS\system32\Drivers\safeboxkrnl.sys
---\SystemRoot\system32\DRIVERS\rdbss.sys
---\SystemRoot\system32\DRIVERS\mrxsmb.sys
---\SystemRoot\system32\drivers\HookSys.sys
---\SystemRoot\system32\drivers\HOOKHELP.sys
---\SystemRoot\system32\drivers\HookCont.sys
---\SystemRoot\System32\Drivers\Fips.SYS
---\SystemRoot\System32\Drivers\Fastfat.SYS
---\SystemRoot\System32\win32k.sys
---\SystemRoot\System32\drivers\Dxapi.sys
---\SystemRoot\System32\watchdog.sys
---\SystemRoot\System32\drivers\dxg.sys
---\SystemRoot\System32\drivers\dxgthk.sys
---\SystemRoot\System32\vmx_fb.dll
---\SystemRoot\system32\DRIVERS\ndisuio.sys
---\SystemRoot\System32\DRIVERS\hgfs.sys
---\SystemRoot\system32\drivers\wdmaud.sys
---\SystemRoot\system32\drivers\sysaudio.sys
---\SystemRoot\System32\Drivers\ParVdm.SYS
---\??\C:\Program Files\VMware\VMware Tools\Drivers\memctl\vmmemctl.sys
---\SystemRoot\system32\DRIVERS\srv.sys