WDM 오디오 용어

이 섹션에서는 Microsoft WDM(Windows 드라이버 모델) 오디오 드라이버 아키텍처와 일반 Windows 계층화된 드라이버 아키텍처 간의 용어 차이에 대해 설명합니다. 일반 드라이버 아키텍처는 SCSI 포트/미니포트 드라이버에 의해 예시됩니다( 스토리지 드라이버 아키텍처 참조).

제네릭 및 WDM 오디오 드라이버 아키텍처에서 정의한 용어는 비슷하지만 아래에 설명된 대로 몇 가지 중요한 차이점이 있습니다.

미니포트 드라이버(일반)

미니포트 드라이버(제네릭)는 시스템 버스(예: PCI 또는 ISA)에 상주하는 어댑터의 하드웨어별 드라이버입니다. 이 드라이버에는 단일 진입점 DriverEntry가 있으며 포트 드라이버에 함수 테이블을 등록합니다. 이 함수 테이블은 미니포트 드라이버의 위쪽 에지 인터페이스 역할을 합니다.

미니포트 드라이버는 드라이버 스택의 포트 드라이버 아래에 있습니다. 즉, 미니포트 드라이버에 대한 모든 호출은 포트 드라이버에서 수행되며 미니포트 드라이버의 모든 호출은 포트 드라이버의 아래쪽 에지 인터페이스에 있습니다.

다음 그림에서는 이 컨텍스트에서 사용되는 용어 스택, 위쪽 에지 인터페이스아래쪽 에지 인터페이스 의 의미를 보여 줍니다. 포트 드라이버를 나타내는 블록은 미니포트 드라이버를 나타내는 블록 위에 누적됩니다. 따라서 미니포트 드라이버는 "스택"의 포트 드라이버 아래에 있습니다.

위쪽에 포트 드라이버가 있고 아래 미니포트 드라이버가 있는 드라이버 스택을 보여 주는 다이어그램으로, 위쪽 및 아래쪽 가장자리 인터페이스를 보여 줍니다.

포트 및 미니포트 드라이버는 서로 노출되는 소프트웨어 인터페이스를 통해 통신합니다. 앞의 그림에서 이러한 인터페이스는 포트 드라이버를 나타내는 블록의 아래쪽 가장자리와 미니포트 드라이버를 나타내는 블록의 위쪽 가장자리와 연결됩니다. 이 표현은 "아래쪽 에지 인터페이스" 및 "위쪽 에지 인터페이스"라는 용어의 원본입니다.

포트 드라이버(일반)

포트 드라이버(제네릭)는 미니포트 드라이버를 둘러싸고 있습니다.

포트 드라이버:

  • WDM 스트리밍 필터를 구현합니다.

  • 운영 체제의 나머지 부분에 공통 인터페이스를 제공합니다.

  • 시스템의 I/O 요청을 처리하고 이러한 요청을 미니포트 드라이버의 함수 테이블에 대한 호출로 다시 캐스팅합니다.

  • 미니포트 드라이버에 지원 함수 라이브러리(포트 드라이버의 아래쪽 에지 인터페이스)를 제공합니다.

포트 드라이버는 미니포트 드라이버에서 운영 체제의 많은 세부 정보를 숨기고 미니포트 드라이버는 포트 드라이버에서 기본 하드웨어의 세부 사항을 숨깁니다. 포트 드라이버의 구현은 다양한 운영 체제 릴리스에 대해 변경될 수 있지만 미니포트 드라이버에 대한 포트 드라이버의 인터페이스는 변경되지 않고 그대로 유지되어 미니포트 드라이버가 플랫폼과 크게 독립적일 수 있습니다.

미니드라이버(일반)

미니드라이버(일반)는 버스의 하드웨어 구성 요소를 나타냅니다. 미니 드라이버는 버스 드라이버를 사용하여 버스를 통해 물리적 디바이스와 통신하고 버스 드라이버와 하나 이상의 클래스 드라이버를 함께 바인딩합니다.

클래스 드라이버는 미니드라이버가 물리적 디바이스를 클라이언트에 논리적 디바이스의 유형으로 제공하는 데 도움이 됩니다. WDM 환경에서 미니 드라이버는 일반적으로 클래스 드라이버에서 IRP 형식으로 요청을 수신하고 IRP 형식의 요청을 버스 드라이버로 보냅니다.

미니드라이버가 여러 클래스 드라이버와 통신해야 할 수도 있습니다. 여러 클래스 드라이버에 바인딩하는 미니 드라이버의 예로는 IEEE 1394 버스의 CD-ROM 드라이브에 대한 미니 드라이버가 있습니다. 파일 시스템에서 드라이브에 액세스할 수 있도록 파일 시스템 드라이버에 바인딩할 수 있습니다. 그러나 CD에서 오디오를 스트리밍할 수 있도록 Redbook 시스템 드라이버 에도 바인딩됩니다.

버스 드라이버(일반)

버스 드라이버(일반)는 미니드라이버에게 물리적 버스에 대한 액세스 권한을 부여합니다. Microsoft Windows HAL(하드웨어 추상화 계층) 은 시스템 버스에 대한 액세스를 제공하기 때문에 시스템 버스 드라이버 라고도 합니다. 자세한 내용은 버스 드라이버를 참조하세요.

클래스 드라이버(제네릭)

클래스 드라이버(제네릭)는 유사한 디바이스의 클래스에서 공통적인 동작을 구현합니다.

클래스 드라이버:

  • 하드웨어 관련 드라이버의 기능 중복을 제거합니다.

  • 버스에만 해당되지 않습니다.

  • 리소스 문제(예: DMA 및 인터럽트)를 인식하지 않습니다.

미니포트 드라이버(WDM 오디오)

미니포트 드라이버(WDM 오디오)는 시스템 버스에 상주하는 오디오 어댑터 카드 함수에 대한 함수별 인터페이스를 구현합니다. 미니포트 드라이버는 어댑터 드라이버의 구성 요소입니다. 운영 체제에서 드라이버로 인식되지 않습니다. 이와 관련하여 오디오 미니포트 드라이버는 일반 미니포트 드라이버와 다릅니다.

일반 미니포트 드라이버와 달리 오디오 미니포트 드라이버는 DriverEntry를 구현하지 않으며 등록되지 않으며 지원을 위해 해당 포트 드라이버에 전적으로 의존하지 않습니다. 여러 함수를 처리하는 여러 오디오 미니포트 드라이버는 단일 어댑터 드라이버(단일 디바이스 개체와 연결됨)에 연결할 수 있습니다.

어댑터 드라이버(WDM 오디오)

어댑터 드라이버(WDM 오디오)는 지정된 어댑터와 연결된 모든 미니포트 드라이버의 컨테이너 역할을 합니다. 이 어댑터 드라이버는 운영 체제에서 드라이버로 인식되며 자체 .sys 파일에 포함되어 있습니다.

오디오 어댑터 드라이버는 미니포트 드라이버 집합과 초기화 문제를 해결하는 추가 코드로 구성됩니다. 예를 들어 어댑터 드라이버는 DriverEntry 진입점을 구현합니다.

포트 드라이버(WDM 오디오)

포트 드라이버(WDM 오디오)는 미니포트 드라이버를 대신하여 KS 필터를 구현하고 포트 클래스 드라이버의 컨텍스트에서 작동합니다. 포트 드라이버는 미니포트 드라이버의 함수별 코드를 KS 필터로 시스템에 노출하고 어댑터 독립적 기능을 구현합니다.

일반 포트 드라이버와 달리 오디오 포트 드라이버는 디바이스 개체를 공유하므로 다르게 인스턴스화됩니다. 또한 오디오 포트 드라이버는 제네릭 포트 드라이버보다 제네릭 클래스 드라이버와 더 유사합니다. 이는 디바이스 클래스에 필요한 동작을 구현한다는 측면에서(버스 독립적이 아님)

포트 클래스 드라이버(WDM 오디오)

포트 클래스 드라이버(WDM 오디오)는 각각 다른 유형의 오디오 하드웨어 기능을 지원하는 포트 드라이버 컬렉션의 컨테이너 역할을 합니다. 다음 그림에서는 오디오 포트 클래스와 어댑터 드라이버 간의 관계를 보여줍니다.

오디오 포트 클래스 드라이버, 어댑터 드라이버 및 해당 미니포트 드라이버 간의 관계를 보여 주는 다이어그램

어댑터 드라이버는 여러 가지 하드웨어 기능을 포함할 수 있는 어댑터 카드 관리합니다. 앞의 그림과 같이 어댑터 드라이버에는 각 유형의 하드웨어 기능을 관리하는 미니포트 드라이버가 포함되어 있습니다. 마찬가지로 포트 클래스 드라이버는 여러 하드웨어 기능이 있는 어댑터 카드에 대한 지원을 제공하도록 설계되었습니다. 포트 클래스 드라이버는 지원하는 잘 정의된 각 함수 형식에 대한 포트 드라이버를 제공합니다. 어댑터 드라이버는 특정 함수의 미니포트 드라이버를 해당 함수 형식의 해당 포트 드라이버에 바인딩합니다. 각 함수의 포트 드라이버는 함수를 사용하는 WDM 오디오 클라이언트와의 통신을 처리합니다. 미니포트 드라이버에는 해당 함수를 관리하기 위한 모든 하드웨어 관련 코드가 포함되어 있습니다.

포트 클래스 드라이버(WDM 오디오)는 주로 단일 디바이스 개체와 연결된 여러 하위 서비스에 대한 컨테이너로 작동합니다. 버스 드라이버는 열거하는 각 PnP(플러그 앤 플레이) 노드에 대해 단일 PDO(물리적 디바이스 개체)를 만듭니다.

오디오 어댑터의 경우 단일 PnP 노드에는 여러 오디오 함수가 자주 포함됩니다. 노드와 연결된 다양한 함수를 고유한 디바이스로 노출하려면 일반적으로 어댑터용 버스 드라이버를 작성해야 합니다. 버스 드라이버는 하드웨어 함수를 열거하고 해당 PDO를 만듭니다. 이 시나리오에서는 하나 이상의 함수별 드라이버가 PDO에 바인딩하고 어댑터의 공유 리소스에 액세스하기 위해 버스 드라이버와 협상해야 합니다.

포트 클래스 드라이버는 커널 스트리밍 드라이버의 기능을 사용하여 운영 체제가 디바이스를 고유한 하위 서비스 집합으로 인식하도록 단일 디바이스 개체의 다양한 측면을 노출합니다.

원하는 하위 서비스를 지정하기 위해 디바이스 이름에 참조 문자열이 추가됩니다. 커널 스트리밍 드라이버는 이 참조 문자열을 기반으로 만들기 IRP를 디스패치합니다. 파일 개체를 만든 후 커널 스트리밍 드라이버는 하위 서비스를 나타내는 파일 개체를 대상으로 하는 IRP의 디스패치를 제공합니다. 또한 포트 클래스 드라이버는 하위 서비스를 패키징하기 위한 COM 기반 모델을 구현합니다.

어댑터 드라이버는 포트 드라이버와 미니포트 드라이버를 인스턴스화하고 미니포트 드라이버에 대한 포인터를 포트 드라이버의 초기화 함수에 매개 변수로 전달하여 함께 바인딩 합니다(하위 서비스 만들기의 코드 예제 참조). 결과 포트/미니포트 드라이버 스택은 포트 클래스 드라이버가 지원하는 하위 서비스 유형 중 하나를 나타내는 KS 필터를 구성합니다.

포트 클래스 드라이버의 PcRegisterSubdevice 함수는 시스템의 나머지 부분에 의해 디바이스로 인식되는 하위 서비스를 등록합니다. 포트 드라이버는 디바이스 개체를 대상으로 하는 생성 IRP를 수신하지만 하위 서비스가 등록된 참조 문자열로 지정된 IRP에 대해서만 수신합니다. 또한 포트 드라이버는 하위 서비스에 연결된 파일 개체를 대상으로 하는 IRP를 받습니다. 포트 드라이버는 하위 서비스가 KS 필터로 동작하고 미니포트 드라이버와 적절하게 통신할 책임이 있습니다.

다기능 오디오 카드용 드라이버를 디자인하는 방법에 대한 자세한 내용은 다기능 오디오 디바이스를 참조하세요.