liangam
驱动牛犊
驱动牛犊
  • 注册日期2008-11-17
  • 最后登录2012-03-02
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1429回复:2

有关DeviceExtension的小问题,请大家帮忙看看

楼主#
更多 发布于:2012-03-01 19:16
在写windows驱动程序的时候,通常我们会定义一个设备扩展结构。 我想知道为什么,我自定义的结构不分配内存就可以直接使用。
 
先看下 Device_Object 的结构(这个是SDK自己定义的,DeviceExtension是PVOID类型

typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {
    ULONG Flags;                                // See above:  DO_...
    ULONG Characteristics;                      // See ntioapi:  FILE_...
    PVOID DoNotUse1;
    PVOID DeviceExtension;
   DEVICE_TYPE DeviceType;
    .........................................
} DEVICE_OBJECT;
 
通常我们自己会定义一个设备扩展
 
typedef struct _DEVICE_EXTENSION {
 PDEVICE_OBJECT pDevice;
 UNICODE_STRING ustrDeviceName; //设备名称
 UNICODE_STRING ustrSymLinkName; //符号链接名
} DEVICE_EXTENSION, *PDEVICE_EXTENSION
 
然后在CreateDevice() 的时候,我们保存设备的指针到设备的扩展结构中
 pDevObj->Flags |= DO_BUFFERED_IO;
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
 pDevExt->pDevice = pDevObj;
 pDevExt->ustrDeviceName = devName;

问题来了,pDevObj->DeviceExtension 原型是PVOID,不需要分配内存就直接赋值了?
在什么地方分配的内存啊?
本人新手,大家不要见笑
 
 
one
one
驱动牛犊
驱动牛犊
  • 注册日期2002-04-13
  • 最后登录2014-06-09
  • 粉丝2
  • 关注2
  • 积分27分
  • 威望245点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2012-03-02 09:00
NTSTATUS IoCreateDevice ()会替你分配内存,大小取决于第二个参数IN ULONG DeviceExtensionSize
liangam
驱动牛犊
驱动牛犊
  • 注册日期2008-11-17
  • 最后登录2012-03-02
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-03-02 10:38
明白了!

多谢 one 了

游客

返回顶部