阅读:1515回复:2
有关DeviceExtension的小问题,请大家帮忙看看
在写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,不需要分配内存就直接赋值了? 在什么地方分配的内存啊? 本人新手,大家不要见笑 |
|
沙发#
发布于:2012-03-02 09:00
NTSTATUS IoCreateDevice ()会替你分配内存,大小取决于第二个参数IN ULONG DeviceExtensionSize
|
|
板凳#
发布于:2012-03-02 10:38
明白了!
多谢 one 了 |
|