资讯动态

Windows驱动重要数据结构

发布时间:2026/8/14 10:24:22 来源:尧图企业网站定制
Windows驱动重要数据结构驱动对象每个驱动程序会有唯一的驱动对象与之对应并且这个驱动对象是在驱动加载的时候被内核中的对象管理程序所创建的。驱动对象用DRIVER_OBJECT数据结构表示它作为驱动的一个实例被内核加载并且内核对一个驱动只加载一个实例。确切地说是由内核中的I/O管理器负责加载的。驱动程序需要在DriverEntry中初始化。先了解一下驱动对象的数据结构typedefstruct_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;PFAST_IO_DISPATCH FastIoDispatch;PDRIVER_INITIALIZE DriverInit;PDRIVER_STARTIO DriverStartIo;PDRIVER_UNLOAD DriverUnload;PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION1];}DRIVER_OBJECT;typedefstruct_DRIVER_OBJECT*PDRIVER_OBJECT;重要字段解释DeviceObject每个驱动程序会有一个或多个设备对象。其中每个设备对象都有一个指针指向下一个驱动对象最后一个设备对象指向空。此处的DeviceObject指向驱动对象的第一个设备对象。通过 DeviceObject就可以遍历驱动对象里的所有设备对象。设备对象是由程序员自己创建的而非操作系统完成在驱动被卸载的时候遍历每个设备对象并将其删除。DriverName顾名思义PriveName记录的是驱动程序的名字。这里用UNICODE字符串记录该字符串一般为**\Driver[驱动程序名称]**。HardwareDatabase这里记录的是设备的硬件数据库键名这里同样用UNICODE字符串记录。该字符串一般为\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM。DriverStartIo记录StartIO例程的函数地址用于串行化操作。DriverUnload指定驱动卸载时所用的回调函数地址。MajorFunctionMajorFunction域记录的是一个函数指针数组也就是MajorFunction是一个数组数组中的每个成员记录着一个指针每一个指针指向的是一个函数。这个函数就是处理IRP的派遣函数。FastIoDispatch文件驱动中用到的派遣函数设备对象每个驱动程序会创建一个或多个设备对象用DEVICE_OBJECT数据结构表示。每个设备对象都会有一个指针指向下一个设备对象因此就形成一个设备链。设备链的第一个设备是由上一节介绍的DRIVER_OBJECT结构体中指明的。设备对象保存设备特征和状态的信息其数据结构定义如下typedefstruct_DEVICE_OBJECT{…struct_DRIVER_OBJECT*DriverObject;struct_DEVICE_OBJECT*NextDevice;struct_DEVICE_OBJECT*AttachedDevice;struct_IRP*CurrentIrp;ULONG Flags;struct_DEVOBJ_EXTENSION*DeviceObjectExtension;…}DEVICE_OBJECT;typedefstruct_DEVICE_OBJECT*PDEVICE_OBJECT;// ntndis

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价