KS 핀

미니 드라이버는 인스턴스화할 각 핀 유형에 대한 KSPIN_DESCRIPTOR 구조를 제공합니다. 핀 설명자 구조를 핀 팩터리라고 합니다. 각 핀 팩터리는 특정 유형의 하나 이상의 핀 인스턴스를 인스턴스화할 수 있습니다. 핀 팩터리에는 이 설명자가 인스턴스화하는 핀 유형을 설명하는 여러 배열이 포함되어 있습니다.

미니 드라이버는 이 설명자가 만든 핀이 KSPIN_DESCRIPTOR Categories 멤버에 속하는 하나 이상의 KS 범주를 지정합니다. KS는 범주를 사용하여 필터 그래프를 빌드할 때 핀 인스턴스를 연결합니다. KSPROPERTY_TOPOLOGY_CATEGORIES 속성은 드라이버에서 지원하는 기능 범주의 배열을 쿼리합니다.

미니 드라이버는 하나 이상의 핀 디바이스 이름을 등록하는 INF 파일을 제공합니다. 설치 시 운영 체제는 이름 및 해당 범주를 시스템 레지스트리에 로드합니다. 그런 다음 클라이언트는 이러한 디바이스 이름으로 파일 만들기 호출을 수행하여 핀을 인스턴스화할 수 있습니다.

사용자 모드 클라이언트는 디바이스 이름으로 Win32 함수 CreateFile 을 호출합니다. 예를 들어 "\\.\filters\audio\default 렌더러"는 기본 출력을 위해 구성된 오디오 디바이스에 대한 링크일 수 있습니다. 커널 모드 클라이언트는 커널 모드에서 ZwCreateFile 을 호출합니다. 파일 만들기 루틴이 파일 핸들을 반환한 후 KS 클라이언트는 KS 속성을 통해 핀 인스턴스와 통신합니다.

핀 설명자 구조에서 미니 드라이버는 해당 핀 팩터리에서 지원하는 인터페이스 및 매체를 지정하는 KSPIN_INTERFACE 구조체 및 KSPIN_MEDIUM 구조체의 배열을 배치합니다. 또한 KSPIN_DESCRIPTOR 미니드라이버가 해당 팩터리에서 만든 핀의 유효한 데이터 범위를 지정하는 위치이기도 합니다. KSDATARANGE 구조체 배열에 대한 포인터를 제공하여 이 작업을 수행합니다. 또한 미니드라이버에서는 이 핀 팩터리에서 만든 새 핀에 대한 데이터 및 통신 흐름의 방향을 지정합니다.

미니드라이버를 사용하면 KSPROPSETID_Pin 속성 집합을 지원하여 핀 팩터리를 런타임으로 검색할 있습니다.

핀 연결을 만들려면 KsCreatePin 루틴을 호출합니다. 이 호출에서 미니 드라이버는 요청된 연결을 설명하는 KSPIN_CONNECT 형식의 구조에 대한 포인터를 전달합니다. 핀을 만들 때 필터는 새 핀을 해당 필터의 파일 개체에 종속된 파일 개체로 봅니다.

미니 드라이버는 결과 IRP_MJ_CREATE 제공된 설명자 구조를 사용하여 KsValidateConnectRequest 를 호출합니다. 이 루틴은 이러한 구조체의 유효성을 검사하고 연결 구조 및 루트 파일 개체에 대한 포인터를 반환합니다.

미니드라이버에서는 KSPIN_DESCRIPTOR 구조의 DataFlowCommunication 멤버를 사용하여 다음 핀 세부 정보를 정의합니다.

  • IRP 원본 핀과 IRP 싱크 핀 비교

    IRP 원본 핀이 IRP를 발급합니다. IRP 싱크 핀이 수신합니다. 사용자 모드 클라이언트는 관련 파일 핸들을 통해 IRP 싱크 핀에 직접 I/O 요청을 보냅니다. 클라이언트는 KSPROPERTY_PIN_COMMUNICATION 사용하여 데이터가 핀 형식으로 들어오거나 나가는지 여부를 검사.

  • 데이터 원본 핀과 데이터 싱크 핀 비교

    데이터 원본 핀은 필터의 출력 핀입니다. 데이터 싱크 핀은 입력 핀입니다. 데이터 원본 또는 싱크의 속성은 IRP 원본 또는 싱크와 독립적입니다. 예를 들어 클라이언트는 데이터 원본, IRP 싱크 핀을 데이터 싱크, IRP 원본 핀에 연결할 수 있습니다. 클라이언트는 KSPROPERTY_PIN_DATAFLOW 사용하여 데이터가 핀 형식으로 들어오거나 나가는지 여부를 검사.

연결을 종료할 때 원본 핀의 핸들은 내부 파일 개체가 제거되기 전에 닫혀야 합니다. 원본 핀이 싱크 핀에서 제공하는 리소스를 사용하는 경우 연결이 종료될 때 원본에 알리는 것은 싱크 핀의 책임입니다.

클라이언트는 IRP_MJ_DEVICE_CONTROL 사용하여 DeviceIoControl 루틴(Microsoft Windows SDK 설명서에 설명됨)을 호출하여 커널 스트리밍 핀과 상호 작용합니다. 호출자는 I/O 스택 위치 구조의 Parameters.DeviceIoControl.IoControlCode 에 배치하는 I/O 컨트롤 코드로 요청을 식별합니다.

요청을 지원하기 위해 미니 드라이버는 KsAllocateObjectHeader 호출에서 KSDISPATCH_TABLE 구조체에 대한 포인터를 제공합니다.

쓰기 요청에는 스트림 데이터에 대한 포인터를 포함하는 KSSTREAM_HEADER 구조의 배열에 대한 포인터가 포함됩니다. 읽기 요청에는 읽기 데이터를 반환해야 하는 빈 헤더 구조의 배열에 대한 포인터가 포함되어 있습니다.