Доступ к унифицированной модели свойств устройства
В этом разделе описывается, как драйвер Windows Driver Frameworks (WDF) получает или изменяет свойства, предоставляемые с помощью модели унифицированных свойств устройства. Перечисленные методы доступны начиная с User-Mode Driver Framework (UMDF) версии 2.0 и Kernel-Mode Driver Framework (KMDF) версии 1.13.
Драйверы KMDF и UMDF могут вызывать следующие методы:
Драйверы KMDF и UMDF могут вызывать следующие методы только перед вызовом WdfDeviceCreate. Дополнительные сведения о вызове WdfDeviceCreateсм. в создании объекта устройства Framework.
После вызова WdfDeviceCreate драйвер может получить информацию о свойствах устройства, вызвав соответствующий метод WdfDeviceXxxProperty.
Приведенные выше методы с суффиксом -Ex отличаются от обычных методов тем, что они позволяют указывать свойства с помощью структуры WDF_DEVICE_PROPERTY_DATA, а не с помощью подмножества, которое можно указать с помощью DEVICE_REGISTRY_PROPERTY.
Перед тем как получить данные свойств устройства, драйверы обычно вызывают WdfXxxQueryProperty, чтобы просто узнать требуемый размер буфера. Для некоторых свойств размер данных может измениться между моментом возврата требуемого размера и моментом вызова драйвером WdfXxxQueryProperty снова. Поэтому драйверы должны вызывать WdfXxxQueryProperty внутри цикла, выполняющегося до тех пор, пока состояние возврата не равно STATUS_BUFFER_TOO_SMALL.
Рекомендуется использовать WdfXxxQueryProperty только в том случае, если необходимый размер буфера известен и не изменяется, поскольку в таком случае драйверу нужно вызвать WdfXxxQueryProperty только один раз. Если требуемый размер буфера неизвестен или изменяется, драйвер должен вызвать WdfXxxAllocAndQueryProperty.
Доступ к свойствам интерфейса устройства
Драйверы UMDF могут использовать следующие методы для получения или изменения свойств интерфейса устройства, предоставляемых через модель унифицированных свойств:
Чтобы получить или изменить свойство интерфейса устройства, драйвер KMDF должен вызывать функции IoGetDeviceInterfacePropertyData или IoSetDeviceInterfacePropertyData напрямую.