Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этой теме содержится сводка по 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
Термин синхронизация — это общий термин, который используется для обозначения операций, необходимых для совместного использования ресурсов (памяти, ввода-вывода и т. д.) между несколькими одновременными клиентами.
Сериализация терминов используется для ссылки на один тип синхронизации для одного типа объекта (запросы ввода-вывода, обратные вызовы и т. д.).
Драйверы 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