다음을 통해 공유


포트 클래스 소개

PCI 및 DMA 기반 오디오 디바이스용 대부분의 하드웨어 드라이버는 PortCls 시스템 드라이버(Portcls.sys)를 통해 액세스할 수 있는 포트 클래스 라이브러리를 기반으로 합니다. PortCls는 Microsoft가 운영 체제의 일부로 포함하는 오디오 포트 클래스 드라이버입니다. PortCls는 대부분의 일반 KS(커널 스트리밍) 필터 기능을 구현하는 포트 드라이버 집합을 제공합니다. 따라서 PortCls는 오디오 드라이버 개발자의 작업을 간소화합니다. 하드웨어 공급업체는 오디오 어댑터의 하드웨어 관련 기능을 처리하기 위해 미니포트 드라이버 집합만 제공해야 합니다.

하드웨어 공급업체는 오디오 디바이스에 대해 자체 KS 필터를 구현할 수 있는 옵션이 있지만 이 옵션은 일반적인 오디오 디바이스에서 어렵고 필요하지 않습니다. KS 필터를 개발하여 Stream.sys, Stream 클래스 드라이버 또는 AVStream 클래스 드라이버인 Avstream.sys 준수할 수 있습니다. 그러나 Stream.sys 기반으로 하는 KS 필터는 AVStream에서만 사용할 수 있는 향상된 기능을 활용할 수 없습니다. KS 필터 및 PortCls에 대한 자세한 내용은 WDM 오디오 드라이버 시작 참조하세요.

PortCls의 내부 구현은 기존 드라이버와의 호환성을 유지하면서 연속 Windows 릴리스에서 커널 스트리밍 개선 사항을 활용하도록 발전할 수 있습니다.

PortCls는 Portcls.sys 시스템 파일에서 내보내기 드라이버(커널 모드 DLL)로 구현되며 다음 항목을 포함합니다.

  • 어댑터 드라이버에서 호출할 수 있는 도우미 함수 집합

  • 오디오 포트 드라이버 컬렉션

어댑터 드라이버를 제공하는 것은 오디오 디바이스의 하드웨어 공급업체의 책임입니다. 어댑터 드라이버에는 초기화 및 드라이버 관리 코드( DriverEntry 함수 포함) 및 오디오 미니포트 드라이버 컬렉션이 포함됩니다.

운영 체제가 어댑터 드라이버를 로드할 때 어댑터 드라이버는 미니포트 드라이버 개체 집합을 만들고 PortCls 시스템 드라이버에 해당 포트 드라이버 개체 집합을 만들라는 메시지를 표시합니다. (하위 서비스 만들기의 코드 예제는 이 프로세스를 보여 줍니다.) 이러한 포트 드라이버는 일반적으로 Portcls.sys 파일에서 사용할 수 있는 포트 드라이버의 하위 집합입니다. 각 미니포트 드라이버는 Portcls.sys 일치하는 포트 드라이버에 바인딩하여 완전한 하위 서비스 드라이버를 형성합니다. 포트 및 미니포트 하위 드라이버의 조합은 KS 필터입니다( 오디오 필터 참조). 예를 들어 일반적인 어댑터 드라이버에는 WaveRT, DMusUART 및 토폴로지( IMiniportWaveRT, IMiniportDMusIMiniportTopology 인터페이스 포함)의 세 가지 미니포트 드라이버가 포함될 수 있습니다. 초기화 중에 이러한 미니포트 드라이버는 Portcls.sys 파일에 포함된 WaveRT, DMus 및 토폴로지 포트 드라이버( IPortWaveRT, IPortDMusIPortTopology 인터페이스 포함)에 바인딩됩니다. 이러한 세 개의 하위 드라이버 각각은 KS 필터의 형태를 취합니다. 세 필터는 함께 오디오 어댑터의 전체 기능을 노출합니다.

일반적으로 포트 드라이버는 오디오 하위 서비스의 각 클래스에 대한 대부분의 기능을 제공합니다. 예를 들어 WaveRT 포트 드라이버는 오디오 데이터를 DMA 기반 오디오 디바이스로 스트리밍하는 데 필요한 대부분의 작업을 수행하는 반면 미니포트 드라이버는 DMA 주소 및 디바이스 이름과 같은 디바이스별 세부 정보를 제공합니다.

오디오 어댑터 드라이버 및 미니포트 드라이버는 일반적으로 Microsoft C++로 작성되며 COM 인터페이스를 광범위하게 사용합니다. 포트 미니포트 드라이버 아키텍처는 모듈식 디자인을 촉진합니다. 미니포트 드라이버 작성기는 헤더 파일 Portcls.h에 정의된 IMiniport 인터페이스에서 파생된 C++ 클래스로 드라이버를 구현해야 합니다. 하드웨어 초기화는 드라이버 로드 시간에 발생합니다. 일반적으로 IMiniport 파생 클래스의 Init 메서드(예: IMiniportWaveRT::Init)에서 발생합니다. 오디오 미니포트 드라이버의 COM 구현에 대한 자세한 내용은 커널의 COM을 참조하세요.

다음 다이어그램에서는 포트 및 미니포트 드라이버와 오디오 스택의 위치 간의 관계를 보여 줍니다.

오디오 스택의 포트 드라이버와 미니포트 드라이버 간의 관계를 보여 주는 다이어그램

앞의 다이어그램에서 KSEndpoint 구성 요소는 Windows Vista 이상 버전의 Windows와 함께 제공되는 시스템 제공 파일입니다. 이 구성 요소는 DLL(Audiokse.dll) 형식으로 제공됩니다. KSEndpoint는 커널 모드 디바이스 엔드포인트를 추상화하고 추상화된 엔드포인트에 대한 액세스 권한을 오디오 엔진에 제공합니다. 오디오 엔진에 대한 자세한 내용은 Windows Vista 오디오 엔진 탐색을 참조하세요.

이전 다이어그램의 범례는 공급업체가 제공하는 드라이버 구성 요소를 나타내는 상자를 보여 줍니다. 각 미니포트 드라이버의 위쪽 가장자리는 각 포트 드라이버의 아래쪽 가장자리에 인터페이스됩니다. 예를 들어 WaveRT 포트 드라이버는 IPortWaveRT 인터페이스를 WaveRT 미니포트 드라이버에 노출합니다. 이 인터페이스는 IMiniportWaveRT 인터페이스를 포트 드라이버에 노출합니다. 이러한 인터페이스를 상한 및 한 인터페이스라고도 합니다.

포트 클래스와 AVStream 클래스 드라이버는 모두 WDM 드라이버이고 둘 다 WDM 커널 스트리밍 아키텍처를 지원한다는 측면에서 비슷합니다. 그러나 포트 클래스 드라이버는 다중 프로세서 처리 및 재진입 영역에서 AVStream 클래스 드라이버와 다릅니다. 포트 클래스 드라이버는 다음을 수행합니다.

  • 클래스 드라이버, 포트 드라이버 및 공급업체에서 제공하는 미니포트 드라이버를 결합하는 3계층 접근 방식을 사용합니다.

  • 제한된 수의 오디오 기능을 사용하면 미니포트 드라이버가 오디오 하드웨어에 더 가깝게 작동할 수 있습니다.

  • 특정 디바이스에 대해 여러 포트 또는 미니포트 드라이버를 연결할 수 있도록 허용합니다. 이 기능을 사용하면 다기능 카드를 더 잘 지원할 수 있습니다.

  • 외부 버스(예: USB)를 지원하지 않습니다. 모든 포트 드라이버는 시스템 버스(PCMCIA 및 PCI)에 있는 디바이스를 지원합니다.

WDM 오디오 포트 및 미니포트 드라이버를 설명하는 용어는 Windows 드라이버의 다른 클래스에 사용되는 용어와는 몇 가지 면에서 다릅니다. 이러한 차이점은 WDM 오디오 용어에 설명되어 있습니다.

이 섹션에서는 다음 항목에 대해 설명합니다.

Function-Specific 인터페이스 구현

운영 체제별 PortCls 지원