Поделиться через


Свойства KS

Свойство представляет функцию или управляющее состояние, принадлежащее объекту потоковой передачи драйвера ядра, например, фильтру или пину. Клиенты минидрайвера потоковой передачи ядра могут отправлять запросы на получение и установку свойств (KSPROPERTY_TYPE_GET и KSPROPERTY_TYPE_SET) фильтрам и пинам, инстанциированным минидрайвером. Группа связанных свойств называется набором свойств.

Чтобы получить или задать отдельные свойства, клиенты пользовательского режима вызывают функцию DeviceIoControl Win32 с параметром dwIoControlCode , заданным для IOCTL_KS_PROPERTY. DeviceIoControl описано в документации по пакету SDK для Microsoft Windows. Клиенты режима ядра должны вызывать KsSynchronousDeviceControl.

Входной буфер — это структура KSPROPERTY или оболочка, содержащая структуру KSPROPERTY и другие сведения, относящиеся к запросу. В ответ на этот вызов операционная система отправляет IRP драйверу класса.

Когда драйвер класса получает результирующий IRP, он вызывает KsPropertyHandler. Драйвер класса включает в себя в качестве параметра вызова адрес структуры KSPROPERTY, которая определяет особенности запроса свойства. Запрос на свойство обрабатывается автоматически на уровне классового драйвера или обработчиком, предоставленным минидрайвером. См. наборы свойств потоковой передачи ядра для справочной информации, в том числе о наборах свойств, которые обрабатываются драйвером класса и для которых требуются обработчики, предоставляемые минидрайвером. Минидрайвер может переопределить или расширить обработчик драйвера класса, предоставив функции обратного вызова для свойства, которое по умолчанию обрабатывается драйвером класса.

Если минидрайвер предоставил обработчики для этого свойства, KsPropertyHandler передаёт запрос соответствующей функции обратного вызова, предоставленной минидрайвером.

Минидрайвер предоставляет указатели на обратные вызовы свойств в структуре типа KSPROPERTY_ITEM. Минидрайвер группирует массив связанных структур KSPROPERTY_ITEM в структуре KSPROPERTY_SET. Различные модели драйверов классов имеют несколько разные методы, с помощью которых минидрайвер может сделать данные набора свойств доступными для драйвера класса. Сведения, специфичные для драйверов класса, можно найти, следуя ссылкам в Kernel Streaming.

Минидрайвер также предоставляет указатель на структуру KSPROPERTY_VALUES в структуре KSPROPERTY_ITEM. Структура KSPROPERTY_VALUES, в свою очередь, содержит массив структур KSPROPERTY_MEMBERSLIST. Здесь минидрайвер задает размер и тип допустимых значений для свойства. Каждая структура KSPROPERTY_MEMBERSLIST содержит элемент заголовка: см. KSPROPERTY_MEMBERSHEADER для получения информации о том, как указать допустимые диапазоны или значения для свойства, которое поддерживает ваш минидрайвер. Вы также можете найти реализацию этого механизма в примере Testcap в пакете драйверов Microsoft Windows (WDK).

Чтобы сообщить о размере и типе допустимых значений для свойства, драйвер класса возвращает структуру KSPROPERTY_DESCRIPTION в ответ на запрос KSPROPERTY_TYPE_BASICSUPPORT от клиента.

Драйвер класса может добавить в структуру KSPROPERTY_DESCRIPTION список структур KSPROPERTY_MEMBERSHEADER.