다음을 통해 공유


ACX IO 요청 패킷 IRP

이 항목에서는 ACX(Audio Class eXtensions) IO 요청 패킷 IRP에 대한 요약을 제공합니다.

ACX에 대한 일반적인 내용은 ACX 오디오 클래스 확장 개요ACX 개체 요약을 참조하세요. ACX 대상 및 동기화에 대한 자세한 내용은 ACX 대상 및 드라이버 동기화를 참조 하세요.

IRP 요청 디스패치

ACX 클라이언트는 IRP(드라이버 요청)를 통해 작업을 지정합니다. IRP 에 대한 일반적인 내용은 I/O 요청 패킷재사용 가능한 IRP를 사용하는 패킷 기반 I/O를 참조하세요.

클라이언트는 회로 또는 스트림 핸들을 사용하여 회로/핀/요소/스트림에 이 요청을 보냅니다. 요청 ID는 세 배입니다.

  • set(guid),
  • id/index(ulong)
  • 선택적 pin-id/node-id(ulong) 값입니다.

생성 시 드라이버는 필요에 따라 속성/메서드/이벤트를 다음 개체 중 하나와 연결할 수 있습니다.

  • pin
  • 회로
  • stream
  • 요소

각 속성/메서드/이벤트는 ID 및 콜백 처리기로 식별됩니다. 기본적으로 ACX는 KS 클라이언트(사용자 모드 계층)에 필요한 모든 속성/메서드/이벤트를 정의하므로 드라이버는 다시 정의할 필요가 없습니다. 드라이버는 사용자 지정 속성/메서드/이벤트만 정의해야 합니다.

ACX는 ACX/KS 스타일 IoCtrl 요청을 받으면 요청의 유효성을 검사하고 호출자의 버퍼를 메모리에 잠깁니다. 이 유효성 검사 및 버퍼 잠금은 초기화 시 ACX가 등록한 WDM 사전 프로세스 콜백에서 수행됩니다. 이 단계에서 ACX는 표준 디스패치를 위해 WDF로 다시 전달하기 전에 WDM IRP에 자체 완성 콜백을 추가합니다. 완성 콜백을 사용하면 ACX에서 필요에 따라 호환성 해결 방법을 추가/삽입할 수 있습니다.

다음 WDF는 동적 디스패치 IRP 콜백을 호출합니다. 이 콜백 ACX/드라이버(선택 사항)는 WDF 큐를 요청과 연결합니다. 이 콜백에서 ACX는 이 요청이 전송된 핸들을 사용하여 회로, 핀, 회로 요소 또는 스트림, 요청 내의 선택적 pin-id/node-id/circuit-element와 같은 대상 ACX 개체를 찾습니다.

오디오 복합 디바이스에서는 대상 개체(회로 전용)가 요청이 원래 전송된 스택과 다른 스택에 있을 수 있습니다. 또한 요청이 여러 스택에서 작동해야 할 수 있습니다. 예를 들어 스트림 변경 상태입니다.

대상이 식별되면 대상 회로/스트림 개체가 기본 처리 큐에 대한 재정의를 지정하는 경우 ACX는 현재 핸들과 연결된 기본 큐를 사용하는지 검사. 그런 다음 ACX/드라이버는 지정된 큐 또는 기본 큐에 요청을 삽입하도록 WDF에 지시합니다.

다음 WDF는 호출자 내 프로세스 콜백(있는 경우)을 호출합니다. ACX는 사전 프로세스 콜백에서 메모리의 버퍼를 이미 잠갔기 때문에 호출자 내 프로세스 콜백이 필요/사용되지 않습니다. 따라서 ACX는 요청에 대한 대상 큐를 지정한 후 프로세스 내 콜백을 호출하지 않도록 WDF에 알릴 수 있습니다.

보조 큐 사용

기본 ACX 큐는 전원 관리형 직렬 잠금 없는 큐입니다. 드라이버는 결정되지 않은 시간을 갖는 모든 요청을 보조 큐로 이동해야 합니다. 드라이버 관리 큐는 수동 수동 큐일 수 있으며, 드라이버가 나중에 완료할 준비가 될 때까지 이러한 요청을 보류할 수 있습니다.

전원 참조 요청

ACX는 드라이버에 요청을 디스패치하기 전에 디바이스의 전원을 자동으로 깁니다. 이 작업은 WDF 전원 관리 큐를 사용하여 암시적으로 수행됩니다. 그러면 포트클과 유사한 동작이 만들어집니다. 즉, 요청을 디스패치하기 전에 전원 참조가 수행됩니다.

큐의 디스패치 처리기 호출

다음 WDF는 전원 참조를 사용하고 큐의 디스패치 처리기를 호출합니다. ACX 처리기와 연결된 기본 큐는 모든 사전 프로세스 재정의에 대해 검사 있으며, 있는 경우 ACX는 등록된 드라이버의 사전 프로세스 콜백을 호출합니다. ACX를 사용하면 드라이버가 요청 유형(속성, 이벤트 및 메서드) 및 요청 ID(선택 사항)에 따라 재정의를 지정할 수 있습니다.

사전 프로세스 콜백을 지정한 경우 ACX가 콜백을 호출한 후 드라이버가 요청을 소유합니다. 드라이버는 요청을 완료하거나 정상적인 디스패치를 위해 ACX로 다시 전달할 수 있습니다.

사전 프로세스 콜백을 지정하지 않았거나 드라이버가 ACX에 요청을 다시 제공하는 경우 ACX는 대상 ACX 개체를 검색하고 선언된 속성/이벤트/메서드의 콜백을 찾습니다. 그런 다음 WDF 요청 및 대상 ACX 개체(회로/스트림/회로 요소)를 전달하는 콜백을 호출합니다.

다음 ACX(또는 사용자 지정 속성의 경우 드라이버)는 요청된 작업을 수행하고 요청을 완료하거나 요청이 결정되지 않은 시간이 걸리는 경우 드라이버는 요청을 보조 큐로 이동할 수 있습니다. 드라이버는 활성 보류 중인 요청을 직렬화하고 완료해야 합니다.

이 다이어그램은 일반적인 요청 디스패치 워크플로를 보여 줍니다.

오디오 서비스, WDF, ACX 및 드라이버가 있는 디스패치 워크플로를 보여 주는 다이어그램

이 다이어그램은 드라이버에 ACX 전처리 콜백이 정의된 경우의 디스패치 워크플로를 보여 주지만, 결국에는 ACX 프레임워크에서 요청을 처리합니다.

오디오 서비스, WDF, ACX 및 전처리 콜백이 있는 드라이버가 있는 디스패치 워크플로를 보여 주는 다이어그램

ACX 회로 PnP 내부 인터페이스

ACX EM(Endpoint Manager)과 ACX 드라이버 구성 요소(커널 모드 또는 사용자 모드 구성 요소) 간의 통신을 용이하게 하기 위해 ACX는 다음과 같은 내부 PnP 디바이스 인터페이스를 정의합니다.

  • ACXCATEGORY_CIRCUITFACTORY
  • ACXCATEGORY_CIRCUIT

EM은 ACXCATEGORY_CIRCUITFACTORY 인터페이스를 사용하여 대상 디바이스에 이 유형의 특정 회로를 만들거나 제거하도록 지시합니다. 이 인터페이스는 밑줄 디바이스가 회로를 만들 수 있는 동안 활성화되며, 그렇지 않으면 사용하지 않도록 설정됩니다(예: 제거, 서프라이즈 제거, 중지 또는 수동 제거).

오디오 하위 시스템은 ACXCATEGORY_CIRCUIT(회로 관리자 스택과 다른 디바이스 스택에서 만들 수 있음)를 사용하여 ACX 회로를 추적하고 통신합니다. 이 인터페이스는 회로가 만들어지고 명령을 처리할 준비가 되었을 때 활성화됩니다.

다른 전원 및 PnP 프로세스에 대한 자세한 내용은 ACX 디바이스 열거형ACX 전원 관리를 참조하세요.

참고 항목

ACX 오디오 클래스 확장 개요

ACX 참조 설명서

ACX 개체 요약

ACX 버전 정보

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