关闭

设备对象(DEVICE_OBJECT)

366人阅读 评论(0) 收藏 举报
分类:

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;


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36815次
    • 积分:903
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:23篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论