Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Мини-драйвер предоставляет структуру KSPIN_DESCRIPTOR для каждого типа контакта, который необходимо создать. Структура дескриптора pin называется фабрикой pin. Каждая фабрика пинов может создать один или несколько экземпляров определенного типа. Фабрика поизводство булавок содержит несколько массивов, описывающих тип булавки, который создает экземпляр дескриптора.
Минидрайвер указывает одну или несколько категорий KS, к которым относятся выводы, созданные этим дескриптором, в элементе Категории KSPIN_DESCRIPTOR. KS использует категории для подключения экземпляров пинов при построении графа фильтров. Свойство KSPROPERTY_TOPOLOGY_CATEGORIES запрашивает массив функциональных категорий, поддерживаемых драйвером.
Минидрайвер предоставляет INF-файл, который регистрирует одно или несколько имен контактных устройств. При установке операционная система загружает имена и соответствующие категории в системный реестр. Затем клиенты могут делать вызовы на создание файлов с этими именами устройств, чтобы инициализировать пины.
Клиенты пользовательского режима вызывают функцию Win32 CreateFile с именем устройства. Например, "\\.\filters\audio\default renderer" может быть ссылкой на звуковое устройство, настроенное для выходных данных по умолчанию. Клиенты режима ядра вызывают ZwCreateFile из режима ядра. Когда подпрограмма создания файла возвращает дескриптор файла, клиенты KS взаимодействуют с экземплярами пин-кода с помощью свойств KS.
В структурах дескрипторов пинов минидрайвер размещает массивы структур KSPIN_INTERFACE и KSPIN_MEDIUM, которые указывают интерфейсы и среды, поддерживаемые этой фабрикой пинов. KSPIN_DESCRIPTOR также является тем местом, где минидрайвер задает допустимые диапазоны данных для пинов, созданных этой фабрикой. Это делается путем указания указателя на массив структур KSDATARANGE . Минидрайвер также указывает направления потока данных и обмена для новых штифтов, созданных этой фабрикой штифтов.
Минидрайвер позволяет обнаруживать производители пинов во время работы, поддерживая набор свойств KSPROPSETID_Pin.
Чтобы создать пин-соединение, вызовите подпрограмму KsCreatePin. В этом вызове минидрайвер передает указатель на структуру типа KSPIN_CONNECT, описывающую запрошенное подключение. При создании пин-кода фильтр видит новый пин-код как объект файла, подчиненный объекту файла для этого фильтра.
Минидрайвер вызывает KsValidateConnectRequest со структурами дескриптора, которые предоставлены в результирующем IRP_MJ_CREATE. Эта подпрограмма проверяет эти структуры и возвращает указатель на структуру подключения и корневой объект файла.
Минидрайверы используют члены DataFlow и Communication структур KSPIN_DESCRIPTOR для определения следующих параметров пинов:
Пин-код источника IRP и пин-код приемника IRP
Штырь источника IRP выпускает IRP; штырь приемника IRP их получает. Клиент в пользовательском режиме отправляет запросы ввода-вывода непосредственно на приемный пин IRP через соответствующий дескриптор файла. Клиенты используют KSPROPERTY_PIN_COMMUNICATION , чтобы проверить, вступают ли потоки данных в тип пин-кода или из него.
Пин-код источника данных и пин-код приемника данных
Пин-код источника данных — это выходной пин-код фильтра; Пин-код приемника данных — это входной пин-код. Свойство источника данных или приемника не зависит от источника или приемника IRP. Например, клиент может подключить источник данных, входной контакт IRP к приемнику данных, выходной контакт IRP. Клиенты используют KSPROPERTY_PIN_DATAFLOW , чтобы проверить, вступают ли потоки данных в тип пин-кода или из него.
При завершении соединения дескриптор исходного пин-кода должен быть закрыт до уничтожения базового объекта файла. Если исходный пин-код зависит от ресурсов, предоставляемых пин-кодом приемника, он несет ответственность за уведомление источника о завершении подключения.
Клиент взаимодействует с пин-кодом потоковой передачи ядра, вызывая подпрограмму DeviceIoControl (описанную в документации по пакету SDK Для Microsoft Windows) с IRP_MJ_DEVICE_CONTROL. Вызывающий объект определяет свой запрос по коду элемента управления ввода-вывода, который он помещает в Parameters.DeviceIoControl.IoControlCode в структуру местоположения стека ввода-вывода.
Для поддержки запросов мини-драйвер предоставляет указатель на структуру KSDISPATCH_TABLE в вызове KsAllocateObjectHeader.
Запросы на запись содержат указатель на массив структур KSSTREAM_HEADER, которые, в свою очередь, содержат указатели на данные потока. Запросы на чтение содержат указатель на массив пустых структур заголовков, где должны быть возвращены данные чтения.