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


Целевые объекты 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:

  • Использование ссылочных счетчиков и иерархической объектной модели.
  • Управление потоком, настраиваемым драйвером для очередей ввода-вывода.
  • Блокировка презентации объектов для объектов устройств и очередей ввода-вывода.
  • Автоматическая сериализация самонастраивающийся и обратных вызовов питания.

Подробное описание синхронизации и сериализации см. в разделе "Использование автоматической синхронизации". Более подробное описание см. в статье "Разработка драйверов с помощью Microsoft Driver Foundation Microsoft Press Book".

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

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

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

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

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

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

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

См. также

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

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

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

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

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