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


Целевые объекты ACX и синхронизация драйверов

В этой теме содержится сводка по Audio Class eXtensions (ACX), целевым объектам и синхронизации драйверов.

Общие сведения о расширениях аудиоклассов ACX см. в обзоре исводке объектов ACX. Дополнительные сведения об IRP см. в статье acx io request packet IRPs.

Цели ACX

ACX использует WdfIoTarget для упрощения взаимодействия между объектами ACX, цепями, штифтами, потоками, элементами и фабриками цепей. WdfIoTarget — это существующая абстракция WDF для упрощения взаимодействия между двумя разными стеками.

Драйверы используют AcxTargetCircuit для взаимодействия с удаленным каналом, предоставляемым другим стеком. AcxTargetCircuit реализуется с помощью WdfIoTarget.

Драйверы используют AcxTargetPin для взаимодействия с закреплением удаленного канала, предоставляемым другим стеком. AcxTargetPin реализуется с помощью WdfIoTarget для отправки сообщений в сущность удаленного пин-кода.

Драйверы используют AcxTargetStream для взаимодействия с потоком удаленного канала, предоставляемым другим стеком. AcxTargetStream реализуется с помощью WdfIoTarget для создания удаленного потока и изменения состояния удаленного потока.

Драйверы используют AcxTargetElement для взаимодействия с элементом удаленного канала, предоставляемым другим стеком. AcxTargetElement реализуется с помощью WdfIoTarget для отправки сообщений в сущность удаленного элемента.

Драйверы используют AcxTargetFactoryCircuit для взаимодействия с экземпляром фабрики удаленных каналов. AcxTargetFactoryCircuit реализуется с использованием WdfTarget для отправки сообщений в удаленную фабрику схем.

Для взаимодействия с удаленным каналом каждый из перечисленных выше типов ACX поддерживает следующее:

  • свойства
  • методы
  • События

Все эти типы основаны на типах объектов WdfIoTarget .

На этой схеме показана целевая архитектура ACX и наследование от объектов WDF Driver and Device.

Схема, иллюстрирующая целевую архитектуру ACX с WDFDRIVER, WDFDEVICE, ACXTARGET, ACXSTREAMFACTORY, ACXTARGETELEMENT и ACXTARGETPIN.

Синхронизация и сериализация драйверов ACX

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

Сериализация терминов используется для ссылки на один тип синхронизации для одного типа объекта (запросы ввода-вывода, обратные вызовы и т. д.).

Драйверы ACX — это драйверы WDF, что означает, что синхронизация драйверов ACX основана на возможностях синхронизации WDF:

  • Использование ссылочных счетчиков и иерархической объектной модели.
  • Управление потоком, которое можно настроить через драйвер, для очередей ввода-вывода.
  • Блокировка представления объектов для объектов устройства и очередей ввода-вывода.
  • Автоматическая серийная обработка вызовов Plug and Play и энергетических обратных вызовов.

Подробное описание синхронизации и сериализации см. в разделе "Использование автоматической синхронизации". Более полное объяснение см. в книге «Разработка драйверов с использованием Windows Driver Foundation» от издательства Microsoft Press.

WDF поддерживает следующие области синхронизации:

  • Нет области действия (по умолчанию в KMDF).
  • Область устройства, WDF получает блокировку презентации объекта устройства для сериализации операций.

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

ACX не поддерживает параметр области очереди. С помощью этого параметра драйвер сериализует ввод-вывод в определенной очереди. Разные очереди могут иметь разные области синхронизации.

ACX не поддерживает сериализацию области устройства. По умолчанию ACX сериализует запросы с помощью очереди последовательного ввода-вывода без блокировки. Каждый объект цепи и потока имеет собственную выделенную очередь. Дополнительные сведения о потоковой передаче ввода-вывода см. в разделе потоковой передачи ACX.

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

В качестве исторической справки, оригинальный PortCls использует область синхронизации вроде синхронизации в WDF для области устройств, где все I/O для всех подчинённых звуковых устройств, созданных на этом устройстве, проходят через одну и ту же блокировку сериализации. Этот тип сериализации был, и по-прежнему является причиной различных сбоев. В более поздних версиях Windows 10 (версия 1511 — TH2) драйвер PortCls был обновлён, чтобы использовать другую блокировку для запросов ввода-вывода позиции потока.

См. также

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

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

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

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

Междрайверная коммуникация в мультистековой архитектуре ACX