[适用于 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) |
图书馆 | Wdf01000.sys(KMDF):WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |