Целевые объекты 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:
- Использование ссылочных счетчиков и иерархической объектной модели.
- Управление потоком, настраиваемым драйвером для очередей ввода-вывода.
- Блокировка презентации объектов для объектов устройств и очередей ввода-вывода.
- Автоматическая сериализация самонастраивающийся и обратных вызовов питания.
Подробное описание синхронизации и сериализации см. в разделе "Использование автоматической синхронизации". Более подробное описание см. в статье "Разработка драйверов с помощью Microsoft Driver Foundation Microsoft Press Book".
WDF поддерживает следующие область синхронизации:
- Нет область (по умолчанию в KMDF).
- Область устройства WDF получает блокировку презентации объекта устройства для сериализации операций.
Очередь ACX по умолчанию является пассивной, последовательной очередью без блокировки. Драйвер должен завершить операцию ввода-вывода перед выполнением следующей операции ввода-вывода.
ACX не поддерживает параметр область очереди. С помощью этого параметра драйвер сериализует ввод-вывод в определенной очереди. Разные очереди могут иметь разные область синхронизации.
ACX не поддерживает сериализацию устройств область. По умолчанию ACX сериализует запросы с помощью очереди последовательного ввода-вывода без блокировки. Каждый объект канала и потока имеет собственную выделенную очередь. Дополнительные сведения о потоковой передаче ввода-вывода см. в разделе потоковой передачи ACX.
Если драйвер содержит блокировку, он никогда не должен вызывать код (явно или неявно) за пределами своего элемента управления, пока блокировка не будет освобождена.
В качестве исторической справки исходный ПортКлс использует область синхронизации, например синхронизацию область устройства WDF, где все устройства ввода-вывода для всех звуковых подустройств, созданных на этом устройстве, проходят через ту же блокировку сериализации. Этот тип сериализации был, и по-прежнему является причиной различных сбоев. В более поздних версиях Windows 10 (версия 1511 — TH2) PortCls была обновлена, чтобы использовать другую блокировку для запросов ввода-вывода положения потока.
См. также
Общие сведения о расширениях аудиоклассов ACX