Функция WdfDeviceQueryProperty (wdfdevice.h)
[Применимо к KMDF и UMDF]
Метод WdfDeviceQueryProperty получает указанное свойство устройства.
Синтаксис
NTSTATUS WdfDeviceQueryProperty(
[in] WDFDEVICE Device,
[in] DEVICE_REGISTRY_PROPERTY DeviceProperty,
[in] ULONG BufferLength,
[out] PVOID PropertyBuffer,
[out] PULONG ResultLength
);
Параметры
[in] Device
Дескриптор объекта устройства платформы.
[in] DeviceProperty
Перечислитель DEVICE_REGISTRY_PROPERTYтипа, определяющий свойство устройства, которое требуется извлечь.
[in] BufferLength
Размер буфера в байтах, на который указывает PropertyBuffer.
[out] PropertyBuffer
Указатель на выделенный вызывающим буфером, который получает запрошенные сведения. Указатель может быть NULL, если параметр BufferLength равен нулю.
[out] ResultLength
Указанное вызывающим расположением, которое, при возврате, содержит размер в байтах сведений, хранящихся в PropertyBuffer. Если возвращаемое значение функции STATUS_BUFFER_TOO_SMALL, это расположение получает требуемый размер буфера.
Возвращаемое значение
Если операция выполнена успешно, WdfDeviceQueryProperty возвращает STATUS_SUCCESS. К дополнительным возвращаемым значениям относятся:
Возвращаемый код | Описание |
---|---|
|
Предоставленный буфер слишком мал, чтобы получить информацию. |
|
Указанное значение DeviceProperty недопустимо |
|
Драйверы устройства еще не сообщили о свойствах устройства. |
Метод может возвращать другие значения NTSTATUS.
Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Замечания
Перед получением данных свойств устройства драйверы обычно вызывают метод WdfDeviceQueryProper ty, чтобы получить требуемый размер буфера. Для некоторых свойств размер данных может измениться между возвратом требуемого размера и при вызове драйвера WdfDeviceQueryProperty. Таким образом, драйверы должны вызывать WdfDeviceQueryProperty внутри цикла, который выполняется, пока состояние возврата не STATUS_BUFFER_TOO_SMALL.
Рекомендуется использовать WdfDeviceQueryProperty только в том случае, если необходимый размер буфера известен и не изменялся, так как в этом случае драйверу необходимо вызывать WdfDeviceQueryProperty только один раз. Если требуемый размер буфера неизвестен или изменяется, драйвер должен вызвать WdfDeviceAllocAndQueryProperty.
Кроме того, можно использовать WdfDeviceQueryPropertyEx для доступа к свойствам устройства, предоставляемым через модель унифицированных свойств.
Примеры
В следующем примере кода получается свойство device DevicePropertyBusTypeGuid. В примере вызывается WdfDeviceQueryProperty вместо WdfDeviceAllocAndQueryProperty, так как длина GUID известна.
GUID busTypeGuid;
ULONG resultLength = 0;
NTSTATUS status;
status = WdfDeviceQueryProperty(
device,
DevicePropertyBusTypeGuid,
sizeof(GUID),
(PVOID)&busTypeGuid,
&resultLength
);
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.0 |
минимальная версия UMDF | 2.0 |
заголовка | wdfdevice.h (include Wdf.h) |
библиотеки | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
правил соответствия DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |