驱动主要数据结构

来源:互联网 发布:招生管理系统sql论文 编辑:程序博客网 时间:2024/05/16 09:51

驱动对象 Driver_Object

typedef struct _DRIVER_OBJECT {
  CSHORT Type;
  CSHORT Size;
PDEVICE_OBJECT DeviceObject;//设备列表,可以遍历所有这个驱动所有设备
  ULONG Flags;
PVOID DriverStart;
  ULONG DriverSize;
  PVOID DriverSection;
  PDRIVER_EXTENSION DriverExtension;
UNICODE_STRING DriverName;//驱动程序名字
PUNICODE_STRING HardwareDatabase;//HardwareDatabase记录的是设备的硬件数据库名该字符串一般为HKEY_LOCAL_MACHINE\Hardware\DESCRIPTION\System,是一个注册表路径。
PFAST_IO_DISPATCH FastIoDispatch;//文件驱动派遣函数
PDRIVER_INITIALIZE DriverInit;
  PDRIVER_STARTIO DriverStartIo;//记录StartIO例程的函数地址
  PDRIVER_UNLOAD DriverUnload;//指定驱动卸载时所用的回调函数地址
  PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];//函数指针数组,每个成员都是一个处理IRP请求的派遣函数
} DRIVER_OBJECT;
  typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; // ntndis
结构图:

设备对象DeviceObject

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;/*当前IRP结构*/
    PIO_TIMER Timer;
  
    ULONG Flags;  /*设备对象的特性标志*/
    ULONG Characteristics;
    _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;
    /*
    *下列成员用于支持文件系统的互斥操作
    *以便对文件系统处理线程使用设备的计数保持跟踪
    */
    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;

结构图




0 0
原创粉丝点击