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


Поставщики запросов операций ввода-вывода ACX

В этом разделе содержится сводка по ip-адресам запросов запросов операций ввода-вывода для аудиоклассов (ACX).

Общие сведения о расширениях аудиоклассов ACX см. в обзоре и сводке объектов ACX. Сведения о целевых объектах ACX и синхронизации см. в разделе "Целевые объекты ACX" и синхронизация драйверов.

Отправка запросов IRP

Клиент ACX указывает действие с помощью запроса драйвера (IRP). Общие сведения об irPs см. в статье о пакетах запросов ввода-вывода и ввода-выводах на основе пакетов с многократно используемыми irps.

Клиент отправляет этот запрос в канал, пин-элемент или поток с помощью канала или дескриптора потока. Идентификатор запроса является тройным:

  • set (guid),
  • id/index (ulong)
  • необязательное значение pin-id/node-id (ulong).

Во время создания драйвер может при необходимости связать свойства, методы и события с одним из следующих объектов:

  • pin
  • канал
  • потоковая передача
  • элемент

Каждое свойство, метод или событие определяется идентификатором и обработчиком обратного вызова. По умолчанию ACX определяет все свойства, методы и события, необходимые KS-client (уровни пользовательского режима), поэтому драйверы не должны переопределить их. Драйверы должны определять только пользовательские свойства, методы и события.

Когда ACX получает запрос IoCtrl стиля ACX/KS, он проверяет запрос и блокирует буферы вызывающего объекта в памяти. Эта проверка и блокировка буфера выполняются в обратном вызове WDM перед процессом, зарегистрированном ACX во время инициализации. На этом этапе ACX добавляет собственный обратный вызов завершения к WDM IRP, прежде чем переадресовать его обратно в WDF для нормальной отправки. Обратный вызов завершения предоставляет ACX возможность добавлять и внедрять любые обходные пути совместимости по мере необходимости.

Следующий WDF вызывает обратный вызов динамической диспетчеризации IRP, в этом вызове ACX/driver (необязательно) связывает очередь WDF с запросом. В этом вызове ACX находит целевой объект ACX: канал, пин-элемент, элемент канала или поток с помощью дескриптора, по которому был отправлен этот запрос, и необязательный элемент pin-id/node-id/circuit-element в запросе.

В составном звуковом устройстве возможно, что целевой объект (только для канала) может находиться в стеке, отличном от исходного запроса. Кроме того, может потребоваться выполнить запрос на несколько стеков, примером этого является состояние изменения потока.

После определения целевого объекта ACX проверка, если целевой канал или объект stream-object задает переопределение для очереди обработки по умолчанию, если нет, ACX использует очередь по умолчанию, связанную с текущим дескриптором. Затем ACX/driver указывает WDF вставить запрос в указанную или по умолчанию очередь.

Следующий WDF вызывает обратный вызов вызываемого процесса при наличии. ACX не требует и не использует обратный вызов процесса вызова вызывающего объекта, так как он уже заблокирован буферы в памяти в обратном вызове перед процессом. Таким образом, ACX сообщает WDF, чтобы не вызывать обратный вызов в процессе после указания целевой очереди запроса.

Использование вторичной очереди

Очередь ACX по умолчанию — это управляемая питанием, последовательная очередь без блокировки. Драйвер должен переместить любой запрос с неопределенным временем в вторичную очередь. Управляемая очередь драйвера может быть пассивной очередью вручную, где драйвер может хранить эти запросы до тех пор, пока он не будет готов к их выполнению позже.

Запросы power reference

ACX автоматически запустите устройство перед отправкой запроса драйверу. Это делается неявно с помощью управляемых очередей WDF. Это создает поведение, аналогичное портам. То есть перед отправкой запроса используется ссылка на питание.

Вызов обработчика диспетчера очереди

Далее WDF принимает ссылку на питание и вызывает обработчик диспетчера очереди. Очередь по умолчанию, связанная с обработчиком ACX, проверка для любых переопределений предварительного процесса, а если она присутствует, ACX вызывает обратный вызов зарегистрированного драйвера. ACX позволяет драйверу указывать переопределения на основе типа запроса (свойства, события и метода) и (необязательно) идентификаторов запросов.

Если был указан обратный вызов предварительного процесса, после вызова обратного вызова ACX запрос принадлежит драйверу. Драйвер может завершить запрос или перенаправить его обратно в ACX для нормальной отправки.

Если обратный вызов предварительного процесса не указан или драйвер возвращает запрос к ACX, ACX извлекает целевой объект ACX и находит обратный вызов объявленного свойства/ события или метода. Затем он вызывает обратный вызов, передав запрос WDF и целевой объект ACX (канал/stream/circuit-element).

Следующий ACX (или для пользовательских свойств, драйвер) выполняет запрошенное действие и завершает запрос или если запрос занимает неопределенное время, драйвер может переместить запрос в вторичную очередь. Драйвер отвечает за сериализацию и выполнение всех активных ожидающих запросов.

На этой схеме показан типичный рабочий процесс отправки запросов.

Схема, иллюстрирующая рабочий процесс отправки с помощью аудиослужбы, WDF, ACX и драйвера.

На этой схеме показан рабочий процесс отправки, когда драйвер имеет определяемый препроцессный вызов ACX, хотя в конце запроса обрабатывается платформой ACX.

Схема, иллюстрирующая рабочий процесс отправки с помощью аудиослужбы, WDF, ACX и драйвера с препроцессным обратным вызовом.

Внутренние интерфейсы канала ACX PnP

Чтобы упростить взаимодействие между ACX Endpoint Manager (EM) и компонентами драйвера ACX (компонентами режима ядра или пользовательского режима), ACX определяет следующие внутренние интерфейсы устройств PnP:

  • ACXCATEGORY_CIRCUITFACTORY
  • ACXCATEGORY_CIRCUIT

Em использует интерфейс ACXCATEGORY_CIRCUITFACTORY для указания целевому устройству создать или удалить определенный канал этого типа. Этот интерфейс активен, когда устройство подчеркивания может создавать каналы, в противном случае он отключен (например, удаление, удаление сюрпризов, остановка или удаление вручную).

Подсистема аудио использует ACXCATEGORY_CIRCUIT (которые могут быть созданы в стеке устройств, отличном от стека диспетчера каналов), для отслеживания и взаимодействия с каналом ACX. Этот интерфейс активен при создании и готовности канала к обработке команд.

Дополнительные сведения о других процессах питания и PnP см. в перечислении устройств ACX и управлении питанием ACX.

См. также

Общие сведения о расширениях аудиоклассов ACX

Справочная документация по ACX

Сводка объектов ACX

Сведения о версии ACX

Обмен данными между драйверами с несколькими стеками ACX