DriverSection的结构

typedef struct _LDR_DATA_TABLE_ENTRY {
    LIST_ENTRY InLoadOrderLinks;
    LIST_ENTRY InMemoryOrderLinks;
    LIST_ENTRY InInitializationOrderLinks;
    PVOID DllBase;
    PVOID EntryPoint;
    ULONG SizeOfImage;
    UNICODE_STRING FullDllName;
    UNICODE_STRING BaseDllName;
    ULONG Flags;
    USHORT LoadCount;
    USHORT TlsIndex;
    union {
        LIST_ENTRY HashLinks;
        struct {
            PVOID SectionPointer;
            ULONG CheckSum;
        };
    };
    union {
        struct {
            ULONG TimeDateStamp;
        };
        struct {
            PVOID LoadedImports;
        };
    };
} LDR_DATA_TABLE_ENTRY, *PLDR_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  

原文地址:https://www.cnblogs.com/winkyao/p/2283231.html