对于DEVOBJ_EXTENSION 自定义结构的疑问

这是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。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值