现在的位置: 首页 > 综合 > 正文

对于DEVOBJ_EXTENSION 自定义结构的疑问

2013年10月06日 ⁄ 综合 ⁄ 共 897字 ⁄ 字号 评论关闭

这是NTDDK.h中的原型:

 

typedef struct _DEVOBJ_EXTENSION {

    CSHORT          Type;
    USHORT          Size;

    //
    // Public part of the DeviceObjectExtension structure,
    //  

 

    PDEVICE_OBJECT  DeviceObject;               // owning device object

} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;

 

例如:

typedef struct _DEVICE_EXTENSION {      //自定义结构
 PDEVICE_OBJECT pDevice;
 UNICODE_STRING ustrDeviceName; //设备名称
 UNICODE_STRING ustrSymLinkName; //符号链接名
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

 PDEVICE_EXTENSION pDevExt; //自定义结构的指针

 

pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;//将设备的扩展结构转为自定义结构类型,将指针赋于pDevExt
 pDevExt->pDevice = pDevObj;      //修改自定义结构成员
 

可以看出,扩展结构这样就可以变为自定义结构,可以任由程序员可以定义结构并填充。

但是结构大小呢?总不能任由程序员自定义很长的结构吧。而这一切又是如何控制的呢?

起先,以为是把原型都覆盖掉,那岂不是连大小都覆盖?

后来看到DDK这一句注释:// Public part of the DeviceObjectExtension structure,
似乎有些明白,可能DDK定义只有后面这部分是公开的,而前两个段是私有的,所以并不会覆盖到Size及Type.

而在程序员改变为自己的结构后,DDK会自动填充Size及Type。

这样才能控制程序员的自定义结构,来操控设备.

至于是不是这样,还请经过的大牛们指点。

抱歉!评论已关闭.