Share via


ACX 대상 및 드라이버 동기화

이 항목에서는 ACX(오디오 클래스 eXtensions) 대상 및 드라이버 동기화에 대한 요약을 제공합니다.

ACX에 대한 일반적인 내용은 ACX 오디오 클래스 확장 개요ACX 개체 요약을 참조하세요. IRP에 대한 자세한 내용은 ACX IO 요청 패킷 IRP를 참조하세요.

참고

ACX 헤더 및 라이브러리는 WDK 10.0.22621.2428(2023년 10월 24일 릴리스)에 포함되지 않지만 이전 버전과 WDK의 최신(25000 시리즈 빌드) Insider Preview에서 사용할 수 있습니다. WDK의 미리 보기 버전에 대한 자세한 내용은 WDK(Windows 드라이버 키트)의 미리 보기 버전 설치를 참조하세요.

ACX 대상

ACX는 WdfIoTarget 을 사용하여 ACX 개체, 회로, 핀, 스트림, 요소 및 회로 공장 간의 통신을 용이하게 합니다. WdfIoTarget은 서로 다른 두 스택 간의 통신을 용이하게 하기 위한 기존 WDF 추상화입니다.

드라이버는 AcxTargetCircuit 을 사용하여 다른 스택에서 노출되는 원격 회로와 통신합니다. AcxTargetCircuit은 WdfIoTarget을 사용하여 구현됩니다.

드라이버는 AcxTargetPin 을 사용하여 다른 스택에서 노출되는 원격 회로의 핀과 통신합니다. AcxTargetPin은 WdfIoTarget을 사용하여 원격 핀 엔터티로 메시지를 보내도록 구현됩니다.

드라이버는 AcxTargetStream 을 사용하여 다른 스택에서 노출되는 원격 회로의 스트림과 통신합니다. AcxTargetStream은 WdfIoTarget을 사용하여 원격 스트림을 만들고 원격 스트림의 상태를 변경하여 구현됩니다.

드라이버는 AcxTargetElement 를 사용하여 다른 스택에 의해 노출되는 원격 회로의 요소와 통신합니다. AcxTargetElement는 WdfIoTarget을 사용하여 원격 요소 엔터티에 메시지를 보내도록 구현됩니다.

드라이버는 AcxTargetFactoryCircuit을 사용하여 원격 회로 팩터리 instance 통신합니다. AcxTargetFactoryCircuit은 WdfTarget을 사용하여 원격 회로 팩터리로 메시지를 보내도록 구현됩니다.

원격 회로와 상호 작용하기 위해 위에 나열된 각 ACX 유형은 다음을 지원합니다.

  • properties
  • methods
  • events

이러한 모든 형식은 WdfIoTarget 개체 형식을 기반으로 빌드됩니다.

이 다이어그램은 ACX 대상 아키텍처 및 WDF 드라이버 및 디바이스 개체의 상속을 보여 줍니다.

WDFDRIVER, WDFDEVICE, ACXTARGET, ACXSTREAM, ACXSTREAMFACTORY, ACXTARGETELEMENT 및 ACXTARGETPIN을 사용하는 ACX 대상 아키텍처를 보여 주는 다이어그램

ACX 드라이버 동기화 및 serialization

동기화라는 용어는 일반적인 용어이며 여러 동시 클라이언트 간에 리소스(메모리, I/O 등)를 공유하는 데 필요한 작업을 참조하는 데 사용됩니다.

serialization이라는 용어는 한 가지 유형의 개체(I/O 요청, 콜백 등)에 대한 동기화의 한 형식을 참조하는 데 사용됩니다.

ACX 드라이버는 WDF 드라이버입니다. 즉, ACX 드라이버의 동기화는 WDF의 동기화 기능을 기반으로 합니다.

  • 참조 개수 및 계층 구조 개체 모델의 사용.
  • I/O 큐에 대한 드라이버 구성 가능한 흐름 제어입니다.
  • 디바이스 개체 및 I/O 큐에 대한 개체 프레젠테이션 잠금입니다.
  • 플러그 앤 플레이 및 전원 콜백의 자동 직렬화

동기화 및 Serialization에 대한 자세한 설명은 자동 동기화 사용을 참조하세요. 자세한 설명은 Windows 드라이버 파운데이션을 사용하여 드라이버 개발 Microsoft Press Book을 참조하세요.

WDF는 다음 동기화 범위를 지원합니다.

  • scope 없습니다(KMDF의 기본값).
  • 디바이스 scope WDF는 디바이스 개체 프레젠테이션 잠금을 획득하여 작업을 직렬화합니다.

기본 ACX 큐는 잠금이 없는 수동 직렬 큐입니다. 드라이버는 다음 I/O 작업이 전달되기 전에 완료해야 합니다.

ACX는 큐 scope 옵션을 지원하지 않습니다. 이 옵션을 사용하면 드라이버가 특정 큐에서 I/O를 직렬화합니다. 큐가 다르면 동기화 범위가 다를 수 있습니다.

ACX는 디바이스 scope 직렬화를 지원하지 않습니다. 기본적으로 ACX는 잠금 없이 직렬 I/O 큐를 사용하여 요청을 직렬화합니다. 모든 회로 및 스트림 개체에는 고유한 전용 큐가 있습니다. 스트리밍 I/Os에 대한 자세한 내용은 ACX 스트리밍 항목을 참조하세요.

드라이버가 잠금을 보유하는 경우 잠금이 해제될 때까지 컨트롤 외부에서 코드를 명시적으로 또는 암시적으로 호출해서는 안 됩니다.

기록 참조의 경우 원래 PortCls는 WDF 디바이스 scope 동기화와 같은 동기화 scope 사용합니다. 여기서 이 디바이스에서 만든 오디오 하위 디바이스의 모든 I/O는 동일한 serialization 잠금을 통과합니다. 이러한 유형의 serialization은 여전히 다양한 결함의 원인이었습니다. 이후 버전의 Windows 10(버전 1511 - TH2)에서 PortCls는 스트림 위치 I/O 요청에 다른 잠금을 사용하도록 업데이트되었습니다.

추가 정보

ACX 오디오 클래스 확장 개요

ACX 개체 요약

ACX 버전 정보

ACX 참조 설명서

ACX 다중 스택 드라이버 간 통신