Функция WdfDeviceAllocAndQueryProperty (wdfdevice.h)
[Относится к KMDF и UMDF]
Метод WdfDeviceAllocAndQueryProperty выделяет буфер и извлекает указанное свойство устройства.
Синтаксис
NTSTATUS WdfDeviceAllocAndQueryProperty(
[in] WDFDEVICE Device,
[in] DEVICE_REGISTRY_PROPERTY DeviceProperty,
[in] POOL_TYPE PoolType,
[in, optional] PWDF_OBJECT_ATTRIBUTES PropertyMemoryAttributes,
[out] WDFMEMORY *PropertyMemory
);
Параметры
[in] Device
Дескриптор объекта устройства платформы.
[in] DeviceProperty
DEVICE_REGISTRY_PROPERTY типизированный перечислитель, определяющий извлекаемое свойство устройства.
[in] PoolType
Перечислитель POOL_TYPE типа, указывающий тип выделяемой памяти.
[in, optional] PropertyMemoryAttributes
Указатель на структуру WDF_OBJECT_ATTRIBUTES , выделенную вызывающим объектом, которая описывает атрибуты объекта памяти, который будет выделять функция. Этот параметр является необязательным и может быть WDF_NO_OBJECT_ATTRIBUTES.
[out] PropertyMemory
Указатель на расположение типа WDFMEMORY, которое получает дескриптор объекта памяти платформы.
Возвращаемое значение
Если операция выполнена успешно, WdfDeviceAllocAndQueryProperty возвращает STATUS_SUCCESS. К дополнительным возвращаемым значениям относятся:
Код возврата | Описание |
---|---|
|
Указанное значение DeviceProperty недопустимо. |
|
Драйверы устройства еще не сообщили о свойствах устройства. |
Метод может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Метод WdfDeviceAllocAndQueryProperty определяет объем памяти, необходимый для хранения запрошенного свойства устройства. Он выделяет достаточно памяти для хранения данных и возвращает дескриптор в объект памяти платформы, описывающий выделенную память. Чтобы получить доступ к данным, драйвер может вызвать WdfMemoryGetBuffer.
Кроме того, вы можете использовать WdfDeviceAllocAndQueryPropertyEx для доступа к свойствам устройства, которые предоставляются через единую модель свойств.
Примеры
В следующем примере кода инициализируется структура WDF_OBJECT_ATTRIBUTES с атрибутами для объекта памяти платформы, который платформа создаст для запрошенного свойства. Затем в примере вызывается WdfDeviceAllocAndQueryProperty для получения свойства DevicePropertyPhysicalDeviceObjectName . После возврата WdfDeviceAllocAndQueryProperty драйвер может вызвать WdfMemoryGetBuffer , чтобы получить указатель на буфер, содержащий строку имени.
WDF_OBJECT_ATTRIBUTES attributes;
NTSTATUS status;
WDFDEVICE device;
WDFMEMORY memory;
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = device;
status = WdfDeviceAllocAndQueryProperty(device,
DevicePropertyPhysicalDeviceObjectName,
NonPagedPool,
&attributes,
&memory
);
if (!NT_SUCCESS(status)) {
return STATUS_UNSUCCESSFUL;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfdevice.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |