다음을 통해 공유


필터 공장

오디오 어댑터 드라이버는 필터의 인스턴스화를 관리하기 위한 필터 팩토리를 제공합니다. 각 필터 팩터리는 특정 형식의 하나 이상의 KS 필터를 인스턴스화할 수 있습니다. 필터 형식이 특정 하드웨어 함수를 캡슐화하는 경우 팩터리가 인스턴스화할 수 있는 해당 유형의 필터 수는 기본 하드웨어 리소스에 의해 제한됩니다.

필터 팩터리는 하드웨어 기능의 대부분 자율 블록을 관리하므로 각 필터 팩터리는 자체적으로 디바이스 드라이버로 간주될 수 있습니다. 실제로 이전 단락에서 사용되는 어댑터 드라이버라는 용어는 어댑터 카드의 다양한 하드웨어 기능을 관리하기 위해 함께 패키지된 관련 드라이버(필터 팩터리)의 컬렉션을 나타냅니다.

다른 Microsoft WDM(Windows 드라이버 모델) 드라이버와 마찬가지로 필터 팩터리는 전원 관리 및 설정 기능을 처리합니다. 설치하는 동안 드라이버의 INF 파일은 하나 이상의 필터 디바이스 이름을 등록합니다(디바이스 식별 문자열참조). 이 프로세스는 이름을 시스템 레지스트리에 로드하고 오디오 어댑터대한 디바이스 인터페이스 설치 설명된 대로 각 필터 팩터리를 하나 이상의 KS 필터 범주에 연결합니다. 모든 오디오 디바이스는 KSCATEGORY_AUDIO 따라 분류되지만 오디오 디바이스는 KSCATEGORY_RENDER(오디오 렌더링 디바이스의 경우) 또는 KSCATEGORY_CAPTURE(오디오 캡처 디바이스의 경우)와 같은 추가 범주로 분류될 수도 있습니다. 드라이버는 장치에 대한 필터를 등록할 때 사용하는 다양한 범주를 통해 장치의 전반적인 기능을 홍보합니다. 예를 들어, SysAudio 시스템 드라이버이 특정 유형의 오디오 디바이스가 필요한 경우, 레지스트리에서 적절한 범주에 속하는 디바이스를 찾습니다.

운영 체제는 디바이스 및 드라이버 설치설명한 대로 설치 API를 사용하여 레지스트리의 모든 KSCATEGORY_AUDIO 필터 팩터리를 검색하고 열거합니다. 각 팩터리에 대한 레지스트리 항목은 필터 팩터리의 친숙한 이름과 디바이스 이름을 모두 지정합니다. 이 이름은 클라이언트가 필터를 인스턴스화하는 만들기 파일 호출에 전달하는 긴 문자열입니다. 이 호출은 커널 모드에서 ZwCreateFile 또는 사용자 모드에서 CreateFile일 수 있습니다. 필터는 커널 모드 개체이며 커널 핸들로 식별됩니다. create-file 호출은 클라이언트가 필터를 참조하는 데 사용할 수 있는 인스턴스 핸들을 반환합니다. 오디오 그래프의 사용자 모드 클라이언트 또는 업스트림 필터는 이 핸들을 사용하여 IOCTL 요청을 필터로 보내거나 전달할 수 있습니다. CreateFile대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.

예를 들어 일반적인 WDM 오디오 어댑터 카드는 PCI 버스에 상주할 수 있으며 웨이브 데이터를 렌더링하거나 캡처하기 위한 여러 I/O 커넥터를 포함할 수 있습니다. 이 카드의 단일 오디오 장치에는 스피커 세트와 라인아웃 케이블을 구동하기 위한 아날로그 오디오 아웃 잭과 마이크 및 리네인 케이블에서 신호를 수신하기 위한 아날로그 오디오 인 잭이 포함될 수 있습니다. WDM 오디오 시스템은 디바이스를 필터로 나타내고 오디오 잭을 해당 필터의 핀으로 나타냅니다.

오디오 디바이스의 필터는 별도의 포트 드라이버와 미니포트 드라이버로 구현되며, 서로 결합하여 하나로 작동합니다.

  • 미니포트 드라이버에는 하드웨어 관련 코드가 포함되어 있습니다.
  • 포트 드라이버에는 특정 형식의 모든 필터에 공통적인 제네릭 코드가 포함되어 있습니다.

공급업체는 필터가 오디오 하드웨어를 관리하는 데 필요한 모든 독점 코드를 포함하는 미니포트 드라이버를 작성합니다. 운영 체제는 PortCls 시스템 드라이버를 통해 액세스할 수 있는 포트 드라이버를 제공합니다(Portcls.sys; 포트 클래스 어댑터 드라이버 및 PortCls 시스템 드라이버참조). 필터 구현을 포트 및 미니포트 드라이버로 분할하면 전용 디바이스에 대한 드라이버를 작성하는 작업이 간소화됩니다.

필터 팩터리에서 필터를 인스턴스화하면 먼저 필터에 대한 미니포트 드라이버 개체를 만듭니다. 필터 팩터리는 적절한 포트 개체의 인스턴스를 만들고 미니포트 드라이버 개체를 해당 인스턴스에 바인딩하여 완벽하게 작동하는 필터를 형성합니다. 하위 서비스 만들기 코드 예제에서는 이 프로세스를 보여 줍니다. 포트 및 미니포트 드라이버는 잘 정의된 소프트웨어 인터페이스를 통해 서로 통신합니다. 이러한 인터페이스에 대한 자세한 내용은 미니포트 인터페이스디바이스지원 참조하세요.

오디오 필터는 기본 오디오 디바이스의 구조를 핀 팩터리, 노드 및 내부 연결의 컬렉션으로 노출합니다. 미니포트 드라이버는 이 정보를 PCFILTER_DESCRIPTOR형식의 구조인 필터 설명자로 통합합니다. 이 구조는 필터의 핀 팩토리, 노드 및 내부 연결에 대한 개별 디스크립터를 포함합니다. 이러한 설명자는 다음 형식의 구조체입니다.

미니포트 드라이버에서 필터 설명자를 가져오기 위해 포트 드라이버는 IMiniport::GetDescription 메서드를 호출합니다.

드라이버가 PCFILTER_DESCRIPTOR 구조를 설정하는 방법에 대한 예제는 샘플 오디오 드라이버설명된 Sysvad 샘플 드라이버를 참조하세요.