zoukankan      html  css  js  c++  java
  • WDM驱动笔记


    WDM的 DRIVER_OBJECT  不同于网上的  

    typedef struct _DRIVER_OBJECT {
        CSHORT Type;
        CSHORT Size;
    
        //
        // The following links all of the devices created by a single driver
        // together on a list, and the Flags word provides an extensible flag
        // location for driver objects.
        //
    
        PDEVICE_OBJECT DeviceObject;
        ULONG Flags;
    
        //
        // The following section describes where the driver is loaded.  The count
        // field is used to count the number of times the driver has had its
        // registered reinitialization routine invoked.
        //
    
        PVOID DriverStart;
        ULONG DriverSize;
        PVOID DriverSection;
        PDRIVER_EXTENSION DriverExtension;
    
        //
        // The driver name field is used by the error log thread
        // determine the name of the driver that an I/O request is/was bound.
        //
    
        UNICODE_STRING DriverName;
    
        //
        // The following section is for registry support.  Thise is a pointer
        // to the path to the hardware information in the registry
        //
    
        PUNICODE_STRING HardwareDatabase;
    
        //
        // The following section contains the optional pointer to an array of
        // alternate entry points to a driver for "fast I/O" support.  Fast I/O
        // is performed by invoking the driver routine directly with separate
        // parameters, rather than using the standard IRP call mechanism.  Note
        // that these functions may only be used for synchronous I/O, and when
        // the file is cached.
        //
    
        PFAST_IO_DISPATCH FastIoDispatch;
    
        //
        // The following section describes the entry points to this particular
        // driver.  Note that the major function dispatch table must be the last
        // field in the object so that it remains extensible.
        //
    
        PDRIVER_INITIALIZE DriverInit;
        PDRIVER_STARTIO DriverStartIo;
        PDRIVER_UNLOAD DriverUnload;
        PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
    
    } DRIVER_OBJECT;
    typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; 


    下面是   DriverExtension 结构:

    typedef struct _DRIVER_EXTENSION {
    
        //
        // Back pointer to Driver Object
        //
    
        struct _DRIVER_OBJECT *DriverObject;
    
        //
        // The AddDevice entry point is called by the Plug & Play manager
        // to inform the driver when a new device instance arrives that this
        // driver must control.
        //
    
        PDRIVER_ADD_DEVICE AddDevice;
    
        //
        // The count field is used to count the number of times the driver has
        // had its registered reinitialization routine invoked.
        //
    
        ULONG Count;
    
        //
        // The service name field is used by the pnp manager to determine
        // where the driver related info is stored in the registry.
        //
    
        UNICODE_STRING ServiceKeyName;
    
        //
        // Note: any new shared fields get added here.
        //
    
    
    } DRIVER_EXTENSION, *PDRIVER_EXTENSION;

    PDEVICE_OBJECT 结构:

    typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {
        CSHORT Type;
        USHORT Size;
        LONG ReferenceCount;
        struct _DRIVER_OBJECT *DriverObject;
        struct _DEVICE_OBJECT *NextDevice;
        struct _DEVICE_OBJECT *AttachedDevice;
        struct _IRP *CurrentIrp;
        PIO_TIMER Timer;
        ULONG Flags;                                // See above:  DO_...
        ULONG Characteristics;                      // See ntioapi:  FILE_...
        __volatile PVPB Vpb;
        PVOID DeviceExtension;
        DEVICE_TYPE DeviceType;
        CCHAR StackSize;
        union {
            LIST_ENTRY ListEntry;
            WAIT_CONTEXT_BLOCK Wcb;
        } Queue;
        ULONG AlignmentRequirement;
        KDEVICE_QUEUE DeviceQueue;
        KDPC Dpc;
    
        //
        //  The following field is for exclusive use by the filesystem to keep
        //  track of the number of Fsp threads currently using the device
        //
    
        ULONG ActiveThreadCount;
        PSECURITY_DESCRIPTOR SecurityDescriptor;
        KEVENT DeviceLock;
    
        USHORT SectorSize;
        USHORT Spare1;
    
        struct _DEVOBJ_EXTENSION  *DeviceObjectExtension;
        PVOID  Reserved;
    
    } DEVICE_OBJECT;
    
    typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT; 


    PDEVICE_OBJECT 中的DeviceExtension 结构:

    typedef struct _DEVICE_EXTENSION
    {
    	PDEVICE_OBJECT fdo;
    	PDEVICE_OBJECT NextStackDevice;
    	UNICODE_STRING ustrDeviceName;	// 设备名
    	UNICODE_STRING ustrSymLinkName;	// 符号链接名
    } DEVICE_EXTENSION, *PDEVICE_EXTENSION;






  • 相关阅读:
    JavaScript内存泄漏(转)
    深入理解JavaScript的变量作用域(转)
    Spring MVC 配置(备忘)
    French fashion in Paris
    Windows Server 2003、 WindowsXP, 中和 Windows 2000 中的缓存凭据安全
    doc.txt.exe病毒。
    Exchange server 增加RBL
    无以穷尽的工作。。。
    windows SBS Exchange 数据库恢复
    VLAN介绍
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982528.html
Copyright © 2011-2022 走看看