设备对象(DEVICE_OBJECT)

原创 2013年12月03日 20:09:03

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;


相关文章推荐

设备对象(DEVICE_OBJECT)

DEVICE_OBJECT结构体是操作系统用来表示某个具体的设备对象,一个设备对象是一个逻辑上的,或者虚拟的,或者物理上的设备的具体抽象,驱动通过设备对象来处理I/O请求。 typedef stru...

设备对象(DEVICE_OBJECT)

设备对象(DEVICE_OBJECT) typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { ...
  • minword
  • minword
  • 2012年05月23日 12:59
  • 304

Windows驱动开发(7) - DEVICE_OBJECT结构体

Windows驱动开发(7) - DEVICE_OBJECT结构体typedef struct _DEVICE_OBJECT { CSHORT Type; ...

求助:关于IoCreateFileSpecifyDeviceObjectHint返回结果是STATUS_INVALID_DEVICE_OBJECT_PARAMETER的问题

想在sfcreate中用IoCreateFileSpecifyDeviceObjectHint打开一个文件来判断文件是否存在,如果打开同盘的文件可以实现(返回STATUS_OBJECT_NAME_NO...

Direct3D11 Device(设备对象),Device Context(设备上下文)官方SDK翻译

Dx11Device 官方SDK翻译 作者:CYM 时间:2012/5/19 Device(设备对象) Adevice is used to create resources and to ...

adb device找不到设备

系统从ubuntu,xp,换到win7,机器从实体机到虚拟机换了4台,运行adb devices始终如一,死活就是找不到设备。折腾了一天,终于adb能找到设备了,记录一下,备忘。 smx@smx-T...
  • SMarxX
  • SMarxX
  • 2012年11月09日 20:58
  • 8596

获取android 设备ID (device ID)

  • 2012年05月17日 17:20
  • 38KB
  • 下载

LINUX设备驱动程序(Linux.Device.Driver)

  • 2010年05月26日 09:41
  • 11.22MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设备对象(DEVICE_OBJECT)
举报原因:
原因补充:

(最多只允许输入30个字)