在wdm.h这个头文件中可以看到这两个结构体的定义,下面简单的分析一下结构体中的内容。
DRIVER_OBJECT
typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; //这个驱动生成的设备对象,形成一个链,DeviceObject指向这个链 PDEVICE_OBJECT DeviceObject; //驱动对象是否可以扩展的标记 ULONG Flags; //这部分描述的就是驱动从哪儿被加载。记数字段用来记录驱动注册的重新初始化程序一共被调用了多少次 PVOID DriverStart; ULONG DriverSize; PVOID DriverSection; //指向driver extension.他唯一可以访问的成员就是 DriverExtension->AddDevice,,我们也是利用这个方法在 DriverEntry 程序中存储驱动程序的AddDevice程序 PDRIVER_EXTENSION DriverExtension; // 驱动程序的名字被错误日志线程用来决定I/O请求所绑定的驱动的名字 UNICODE_STRING DriverName; //这个字段是用来进行注册用的。这个指针指向在注册表中硬件信息的路径。 PUNICODE_STRING HardwareDatabase; //这是一个指向支持快速I/O的备用驱动入口的数组的可选择指针,快速I/O通过传入独立参数直接调用驱动程序来实现,而不是利用标准的IRP呼叫机制。 //注意这些方法只能被用于同步的I/O处理,而且是在文件已经被缓存了的情况