DRIVER_OBJECT,DEVICE_OBJECT 结构体分析
来源:互联网 发布:spss如何将数据分组 编辑:程序博客网 时间:2024/06/04 19:56
在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处理,而且是在文件已经被缓存了的情况下 PFAST_IO_DISPATCH FastIoDispatch; //是DriverEntry这个程序的主入口,在I/O管理中来进行设置 PDRIVER_INITIALIZE DriverInit; //是StartIo程序的入口,在DriverEntry来进行设置,如果没有的话,默认是NULL PDRIVER_STARTIO DriverStartIo; //是Unload程序的入口,在DriverEntry来进行设置,如果没有的话,默认是NULL PDRIVER_UNLOAD DriverUnload; //这是一个指针数组,因为每一个驱动程序都需要处理不同种类的IRP消息,所以驱动程序需要设定当不同类型的IRP请求到来时,用哪一个函数来处理这些 //请求,这个数组的小标的值对应的就是IRP major function code,指向的就是处理这种IRP请求的函数。 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];} DRIVER_OBJECT;typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
DEVICE_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; //指向当前的IRP结构 struct _IRP *CurrentIrp; PIO_TIMER Timer; //此成员是一个32位的无符号整型变量,每个位有不同的含义。可通过按位取“或”操作为新创建的设备对象设置不同的特性 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
- DRIVER_OBJECT,DEVICE_OBJECT 结构体分析
- DRIVER_OBJECT & DEVICE_OBJECT
- DRIVER_OBJECT & DEVICE_OBJECT
- DRIVER_OBJECT & DEVICE_OBJECT
- DRIVER_OBJECT结构体
- DRIVER_OBJECT和DEVICE_OBJECT的关系
- DRIVER_OBJECT结构
- Windows驱动开发(7) - DEVICE_OBJECT结构体
- Windows驱动开发(6) - DRIVER_OBJECT结构体
- 驱动对象结构DRIVER_OBJECT
- DEVICE_OBJECT
- DRIVER_OBJECT
- DRIVER_OBJECT
- DRIVER_OBJECT
- 学习笔记之DRIVER_OBJECT对象结构
- 学习笔记之DRIVER_OBJECT对象结构
- driver_object结构几个域的说明
- 《Windows NT FileSystem Internals》学习笔记之DRIVER_OBJECT对象结构
- 排序算法
- Android TTS说中文
- 求字符数组的全排列算法
- Mysql几种索引类型的区别及适用情况
- Android之--自定义ListView
- DRIVER_OBJECT,DEVICE_OBJECT 结构体分析
- Web Service和WCF的到底有什么区别
- Design库,全部控件的使用
- 【HWOJ】计算字符个数
- 今天创建了CSDN博客,用于记录自己的学习经历
- java排序算法二分法 希尔排序 快速排序 归并排序
- 实现Runnable接口创建线程,并验证同步函数this锁--存疑
- MFC开发 常见控件库
- #define