WDM中的结构
---设备对象
设备对象(DEVICE_OBJECT)是WDM中一个重要的数据结构,设备对象保存关于设备特征和状态信息,是I/O管理器和驱动程序了解和操作设备的工具。
装载后的驱动程序需要虚拟、逻辑和物理设备来处理I/O请求。每一个驱动程序在初始化时都要在AddDevice里调用IoCreateDevice函数来创建设备对象。驱动程序为它的每一个设备创建设备对象,对于驱动程序来说,设备对象代表了设备。一个驱动程序对象代表了一个驱动程序,它可以创建一个或多个设备对象。I/O管理器维护一个设备对象列表,并把指针存储到驱动程序对象中。大多数的驱动程序使用设备对象的设备扩展字段来维护设备状态信息或驱动指定的I/O请求的上下文数据。
设备对象是部分不透明的。我们必须知道某些特定的字段和与设备对象有关的系统定义的符号常量,因为我们必须访问这些字段或把它传送给其他例程。下面的这些区域是可访问的:
PDRIVER_OBJECT DriverObject 驱动程序对象指针
PDEVICE_OBJECT NextDevice 下一个设备对象指针,此I/O管理器调用IoCreateDevice更新此链表
PIRP CurrentIrp 当前IRP。如果驱动程序有StartIo例程,并且它的进入点在驱动程序对象内已经设置,且驱动程序正在处理IRP,此字段才不为空
ULONG Flags 规定设备的缓冲策略,DO_BUFFERED_IO DO_DIRECT_IO
PVOID DeviceExtension 设备扩展指针。此结构是驱动程序自定义的,其大小作为 参数传递给IoCreateDevice
DEVICE_TYPE DeviceType 设备类型。在IoCreateDevice函数调用时的第四个参数。如:FILE_DEVICE_UNKNOWN
CCHAR StackSize 发送到该设备的IRP所需的最少数量的I/O堆栈位置
ULONG AlignmentRequirement 缓冲区要求的内存调整
如:
FILE_BYTE_ALIGNMENT
FILE_WORD_ALIGNMENT
没有说明的字段是不可访问的。