• 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  

  • 相关阅读:
    vue框架的vue-router路由的运用
    如何用vue的computed的set和get方法
    如何学习vue的计算属性computed
    从下往上显示的弹出框动画
    vue父传子的使用
    vue局部组件如何使用
    Data 日期-项目(Thread)
    Jframe-项目
    Thread 线程
    Thread知识 (火车票到结束-项目)
  • 原文地址:https://www.cnblogs.com/winkyao/p/2283231.html
Copyright © 2020-2023  润新知