设备对象(DEVICE_OBJECT)
2013-12-03 20:09
411 查看
1.每个驱动程序会创建一个或多个设备对象(下文称DO),用DEVICE_OBJECT数据结构表示。每个DO都会有个指针指向下一个DO,因此就形成了一个DO链。DO链的第一个DO是由DRIVER_OBJECT 结构体中的 PDRIVER_EXTENSION 指明的.DO保存DO特征和状态信息,以下是字段信息:
typedef struct _DEVICE_OBJECT {
CSHORT Type;
USHORT Size;
LONG ReferenceCount;
struct _DRIVER_OBJECT *DriverObject; //point to the DriverObject
struct _DEVICE_OBJECT *NextDevice;// point to the next DO to make the links
struct _DEVICE_OBJECT *AttachedDevice;//如果有更高一层的驱动附加到这个驱动的时候,AttachedDevice指向
//的就是那个更高一层的驱动
struct _IRP *CurrentIrp;//在使用StartIO例程的时候,此域指向的是当前IRP结构
PIO_TIMER Timer;
ULONG Flags; // See above: DO_...
ULONG Characteristics; // See ntioapi: FILE_...
__volatile PVPB Vpb;
PVOID DeviceExtension;
DEVICE_TYPE DeviceType;
CCHAR StackSize; //在多层驱动情况下,驱动与驱动之间会形成类似堆栈的结构。IRP会依次从最高层次传递到最底层。
union {
LIST_ENTRY ListEntry;
WAIT_CONTEXT_BLOCK Wcb;
} Queue;
ULONG AlignmentRequirement;
KDEVICE_QUEUE DeviceQueue;
KDPC Dpc;
//
// The following field is for exclusive use by the filesystem to keep
// track of the number of Fsp threads currently using the device
//
ULONG ActiveThreadCount;
PSECURITY_DESCRIPTOR SecurityDescriptor;
KEVENT DeviceLock;
USHORT SectorSize;
USHORT Spare1;
struct _DEVOBJ_EXTENSION *DeviceObjectExtension; //自己定义特殊结构体。根据设备的需要,需要填写相应的设备类型。当制作虚拟设备时,应选择FILE_DEVICE_UNKNOWN
//类型的设备
PVOID Reserved;
} DEVICE_OBJECT;
typedef struct _DEVICE_OBJECT {
CSHORT Type;
USHORT Size;
LONG ReferenceCount;
struct _DRIVER_OBJECT *DriverObject; //point to the DriverObject
struct _DEVICE_OBJECT *NextDevice;// point to the next DO to make the links
struct _DEVICE_OBJECT *AttachedDevice;//如果有更高一层的驱动附加到这个驱动的时候,AttachedDevice指向
//的就是那个更高一层的驱动
struct _IRP *CurrentIrp;//在使用StartIO例程的时候,此域指向的是当前IRP结构
PIO_TIMER Timer;
ULONG Flags; // See above: DO_...
ULONG Characteristics; // See ntioapi: FILE_...
__volatile PVPB Vpb;
PVOID DeviceExtension;
DEVICE_TYPE DeviceType;
CCHAR StackSize; //在多层驱动情况下,驱动与驱动之间会形成类似堆栈的结构。IRP会依次从最高层次传递到最底层。
union {
LIST_ENTRY ListEntry;
WAIT_CONTEXT_BLOCK Wcb;
} Queue;
ULONG AlignmentRequirement;
KDEVICE_QUEUE DeviceQueue;
KDPC Dpc;
//
// The following field is for exclusive use by the filesystem to keep
// track of the number of Fsp threads currently using the device
//
ULONG ActiveThreadCount;
PSECURITY_DESCRIPTOR SecurityDescriptor;
KEVENT DeviceLock;
USHORT SectorSize;
USHORT Spare1;
struct _DEVOBJ_EXTENSION *DeviceObjectExtension; //自己定义特殊结构体。根据设备的需要,需要填写相应的设备类型。当制作虚拟设备时,应选择FILE_DEVICE_UNKNOWN
//类型的设备
PVOID Reserved;
} DEVICE_OBJECT;
相关文章推荐
- 设备对象(DEVICE_OBJECT)-----------------主要成员
- 设备对象(DEVICE_OBJECT)-----------------主要成员
- 设备对象(DEVICE_OBJECT)
- 设备对象(DEVICE_OBJECT)
- IoGetDeviceObjectPointer和ObReferenceObjectByName得到设备对象指针
- 设备对象(DEVICE_OBJECT)-----------------主要成员
- 设备对象(DEVICE_OBJECT)-----------------设备名称
- 设备对象(DEVICE_OBJECT)
- 设备对象(DEVICE_OBJECT)-----------------主要成员 .
- 设备对象DEVICE_OBJECT
- 设备对象(DEVICE_OBJECT)
- 设备对象(DEVICE_OBJECT)-----------------设备名称
- 设备对象(DEVICE_OBJECT)-----------------设备名称
- IoGetDeviceObjectPointer根据文件名称获取(打开)设备对象
- 驱动开发学习笔记02:DEVICE_OBJECT对象数据结构
- Direct3D11 Device(设备对象),Device Context(设备上下文)官方SDK翻译
- IoEnumerateDeviceObjectList 枚举驱动的所有设备 文件过滤驱动 windows内核开发
- ObReferenceObjectByName通过对象名得到对象指针_例如 设备 事件 互斥体
- IoEnumerateDeviceObjectList 枚举驱动的所有设备 文件过滤驱动 windows内核开发
- 0.driverbase-驱动对象、设备对象、DriverEntry、IoCreateDevice、符号链接、DriverUnLoad、WDM