WdfFdoInitAllocAndQueryProperty 函数 (wdffdo.h)
[适用于 KMDF 和 UMDF]
WdfFdoInitAllocAndQueryProperty 方法分配缓冲区并检索指定的设备属性。
语法
NTSTATUS WdfFdoInitAllocAndQueryProperty(
[in] PWDFDEVICE_INIT DeviceInit,
[in] DEVICE_REGISTRY_PROPERTY DeviceProperty,
[in] POOL_TYPE PoolType,
[in, optional] PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
[out] WDFMEMORY *PropertyMemory
);
参数
[in] DeviceInit
指向驱动程序从其 EvtDriverDeviceAdd 回调函数获取的 WDFDEVICE_INIT 结构的指针。
[in] DeviceProperty
标识要检索的设备属性 的DEVICE_REGISTRY_PROPERTY类型的枚举器值。
[in] PoolType
一个POOL_TYPE类型的枚举器值,该值指定要分配的内存的类型。
[in, optional] PropertyMemoryAttributes
指向调用方分配 的WDF_OBJECT_ATTRIBUTES 结构的指针,该结构描述 WdfFdoInitAllocAndQueryProperty 将分配的内存对象的对象属性。 此参数是可选的,可以WDF_NO_OBJECT_ATTRIBUTES。
[out] PropertyMemory
指向 WDFMEMORY 类型位置的指针,该位置接收框架内存对象的句柄。
返回值
如果操作成功,该方法将返回STATUS_SUCCESS。 其他返回值包括:
返回代码 | 说明 |
---|---|
|
指定的 DeviceProperty 值无效。 |
|
WDFDEVICE_INIT 结构不是从驱动程序的 EvtDriverDeviceAdd 回调函数获取的。 |
该方法还可能返回其他 NTSTATUS 值。
注解
在调用 WdfDeviceCreate 之前,驱动程序必须调用 WdfFdoInitAllocAndQueryProperty。 有关调用 WdfDeviceCreate 的详细信息,请参阅 创建框架设备对象。
调用 WdfDeviceCreate 后,驱动程序可以通过调用 WdfDeviceAllocAndQueryProperty 来获取设备属性信息。
有关 WdfFdoInitAllocAndQueryProperty 方法的详细信息,请参阅 在函数驱动程序中创建设备对象。
或者,可以使用 WdfFdoInitAllocAndQueryPropertyEx 访问通过统一属性模型公开的设备属性。
示例
下面的代码示例调用 WdfFdoInitAllocAndQueryProperty 以获取包含设备安装程序类名称的框架内存对象的句柄。 然后,该示例调用 WdfMemoryGetBuffer 以获取指向包含安装程序类名称的 Unicode 字符串的缓冲区的指针。
NTSTATUS status = STATUS_SUCCESS;
PVOID pMemoryBuffer = NULL;
WDFMEMORY memory = NULL;
status = WdfFdoInitAllocAndQueryProperty(
DeviceInit,
DevicePropertyClassName,
NonPagedPool,
WDF_NO_OBJECT_ATTRIBUTES,
&memory
);
if(NT_SUCCESS(status)){
pMemoryBuffer = WdfMemoryGetBuffer(
memory,
NULL
);
}
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
标头 | wdffdo.h (包括 Wdf.h) |
Library | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | DeviceInitAPI (kmdf) 、 DriverCreate (kmdf) 、 KmdfIrql (kmdf) 、 KmdfIrql2 (kmdf) 、KmdfIrqlExplicit (kmdf) |