다음을 통해 공유


ACX 대상 및 드라이버 동기화

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

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

ACX 대상

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

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

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

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

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

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

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

  • 속성
  • 메서드
  • 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입니다.

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

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

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

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

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

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

드라이버가 잠금을 보유하는 경우 잠금이 해제될 때까지 컨트롤 외부에서 코드를 호출하지 않아야 합니다.

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

참고 항목

ACX 오디오 클래스 확장 개요

ACX 개체 요약

ACX 버전 정보

ACX 참조 설명서

ACX 다중 스택 교차 드라이버 통신