KSFILTER_DESCRIPTOR 구조체(ks.h)

KSFILTER_DESCRIPTOR 구조체는 지정된 필터 팩터리에서 만든 필터의 특성을 설명합니다.

구문

typedef struct _KSFILTER_DESCRIPTOR {
  const KSFILTER_DISPATCH     *Dispatch;
  const KSAUTOMATION_TABLE    *AutomationTable;
  ULONG                       Version;
  ULONG                       Flags;
  const GUID                  *ReferenceGuid;
  ULONG                       PinDescriptorsCount;
  ULONG                       PinDescriptorSize;
  const KSPIN_DESCRIPTOR_EX   *PinDescriptors;
  ULONG                       CategoriesCount;
  const GUID                  *Categories;
  ULONG                       NodeDescriptorsCount;
  ULONG                       NodeDescriptorSize;
  const KSNODE_DESCRIPTOR     *NodeDescriptors;
  ULONG                       ConnectionsCount;
  const KSTOPOLOGY_CONNECTION *Connections;
  const KSCOMPONENTID         *ComponentId;
} KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;

멤버

Dispatch

이 유형의 필터에 대한 KSFILTER_DISPATCH 구조체에 대한 포인터입니다. 이 멤버는 선택 사항이며 필터 만들기, 삭제 등에 대한 알림을 받으려는 클라이언트에서만 제공해야 합니다. 데이터(변환) 처리에 관심이 있는 드라이버는 일반적으로 이 디스패치 테이블과 처리 함수를 제공합니다. 개별 핀 처리 함수 대신 필터 처리 함수를 제공하는 것은 핀 중심이 아닌 드라이버 필터 중심을 만드는 것입니다.

AutomationTable

이 유형의 필터에 대한 KSAUTOMATION_TABLE 구조체에 대한 포인터입니다. 자동화 테이블은 이 필터에서 지원하는 속성, 메서드 및 이벤트를 설명합니다. 이 자동화 테이블은 모든 필터에 대해 AVStream에서 제공하는 자동화 테이블과 병합됩니다. 클라이언트가 AVStream에서 이미 구현한 속성, 메서드 또는 이벤트 처리기를 제공하는 경우 클라이언트의 구현은 AVStream을 대체합니다.

Version

이 멤버는 필터 설명자의 버전을 지정합니다. 이 멤버는 KSFILTER_DESCRIPTOR_VERSION 설정해야 합니다.

Flags

필터의 동작을 설명하는 플래그입니다. 상호 배타적인 KSFILTER_FLAG_CRITICAL_PROCESSING 및 KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 제외하고 비트 OR을 사용하여 플래그를 지정합니다.

플래그 설명
KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING IRQL의 필터 프로세스가 PASSIVE_LEVEL 아니라 DISPATCH_LEVEL 나타냅니다. 이는 KSFILTER_DISPATCH 설명한 대로 필터 프로세스 콜백에 적용됩니다.
KSFILTER_FLAG_CRITICAL_PROCESSING 비동기 처리가 지정되었거나 시스템이 PASSIVE_LEVEL 실행 중이고 프로세스 호출이 DISPATCH_LEVEL 들어오는 경우 큐에 대기 중인 작업 항목에서 처리가 수행됩니다. 이 플래그는 작업 항목이 지연된 작업 큐가 아닌 중요한 작업 큐에 배치되어야 했음을 나타냅니다.
KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES 필터 중심 필터가 길이가 0인 샘플(플래그가 있지만 데이터가 없는 스트림 헤더)을 수신해야 하는 경우 이 플래그를 설정합니다. 이 플래그를 설정하지 않으면 필요한 플래그를 자동으로 전파하여 길이가 0인 샘플이 다운스트림 핀에 전달됩니다. 이는 DX8 및 이전의 기본 동작과 동일합니다. 이 경우 이러한 샘플은 미니 드라이버를 무시합니다. KSPROCESSPIN에서 Terminate 플래그를 설정하여 이 플래그를 "끄기"합니다. 필터 중심 처리도 참조하세요.
KSFILTER_FLAG_DENY_USERMODE_ACCESS 이 플래그는 특정 필터 및 이 필터에서 인스턴스화된 모든 핀에 대한 사용자 모드 액세스를 방지합니다.
KSFILTER_FLAG_HYPERCRITICAL_PROCESSING 비동기 처리가 지정되었거나 시스템이 PASSIVE_LEVEL 실행 중이고 프로세스 호출이 DISPATCH_LEVEL 들어오는 경우 AVStream은 대기 중인 작업 항목을 처리합니다. 이 플래그는 작업 항목이 지연된 작업 큐 또는 중요한 작업 큐가 아닌 하이퍼크리티컬 작업 큐에 배치되어야 했음을 나타냅니다.

ReferenceGuid

이 필터 형식을 식별하는 유니코드 참조 문자열의 이진 표현인 GUID에 대한 포인터입니다. 여러 필터 팩터리에 있는 경우 각각 고유한 GUID가 있어야 합니다. 또한 참조 문자열을 제공하는 다른 메서드는 KsCreateFilterFactory를 사용하여 필터 설명자를 등록해야 합니다. ReferenceGuid에 지정된 값은 드라이버의 INF 파일에서 필터별 참조 GUID와 일치해야 합니다. AVStream Minidriver 초기화를 참조하세요.

PinDescriptorsCount

이 멤버는 PinDescriptors 멤버에서 이 필터 형식에 대해 제공되는 핀 설명자 수를 지정합니다. Windows XP 이상에서는 드라이버가 동적으로 핀을 만드는 경우 PinDescriptorsCount 가 0일 수 있습니다.

PinDescriptorSize

이 멤버는 설명자 테이블에 있는 각 개별 설명자의 크기를 지정합니다. 이 값은 8의 배수여야 하며 최소 sizeof (KSPIN_DESCRIPTOR_EX)여야 합니다. 값이 크면 클라이언트별 설명자 정보를 핀 설명자에 추가할 수 있습니다. 설명에서 추가 정보를 참조하세요.

PinDescriptors

이 필터 형식에서 지원하는 핀을 설명하는 KSPIN_DESCRIPTOR_EX 구조체 배열에 대한 포인터입니다. PinDescriptorsCount가 0이면 이 멤버를 NULL로 설정합니다.

CategoriesCount

이 멤버는 이 필터 형식의 Categories 멤버에 제공되는 범주 GUID 수를 지정합니다. 0은 이 멤버의 법적 가치입니다.

Categories

이 필터 형식의 범주 GUID 배열에 대한 포인터입니다. 필요한 경우 각 범주에 대해 디바이스 인터페이스가 등록됩니다. CategoriesCount가 0인 경우에만 이 멤버는 null일 수 있습니다.

NodeDescriptorsCount

이 멤버는 NodeDescriptors에 제공된 토폴로지 노드 설명자 수를 지정합니다. 0은 이 멤버의 법적 가치입니다.

NodeDescriptorSize

이 멤버는 설명자 테이블에 있는 각 개별 설명자의 크기(바이트)를 지정합니다. 이 값은 8개 이상의 배수여야 하며 적어도 sizeof(KSNODE_DESCRIPTOR)여야 합니다. 값이 크면 클라이언트별 설명자 정보를 노드 설명자에 추가할 수 있습니다. 설명에서 추가 정보를 참조하세요.

NodeDescriptors

이 필터 형식의 토폴로지 노드를 설명하는 KSNODE_DESCRIPTOR 구조체 배열에 대한 포인터입니다. NodeDescriptorsCount가 0인 경우에만 이 멤버는 null일 수 있습니다.

ConnectionsCount

이 멤버는 Connections 있는 토폴로지 연결 수를 지정합니다. 이 멤버는 기본 연결 집합이 사용됨을 나타내는 0일 수 있습니다. 기본 연결을 사용하면 필터의 토폴로지는 필터의 각 핀이 토폴로지 노드의 해당 ID에 연결되는 단일 토폴로지 노드로 설명됩니다. 각 연결의 방향은 핀 데이터 흐름에 따라 결정됩니다.

Connections

이 필터 형식에 있는 KSTOPOLOGY_CONNECTION 구조체 배열에 대한 포인터입니다. 이 멤버는 선택 사항입니다. ConnectionsCount가 0인 경우에만 NULL일 수 있습니다(이 경우 기본 토폴로지를 사용).

ComponentId

이 필터 형식의 KSCOMPONENTID 구조체에 대한 포인터입니다. ID 정보를 제공하는 구성 요소 ID 속성에 사용됩니다. 이 멤버는 선택 사항입니다.

설명

필터 설명자를 배치할 때 호출자가 유용할 수 있는 여러 매크로가 있습니다. 핀 설명자, 범주, 노드 설명자 및 연결에 대한 개수, 크기 및 테이블을 지정하는 대신 유용한 매크로가 많이 있습니다.

매크로 Description
DEFINE_KSFILTER_PIN_DESCRIPTORS(Table) 테이블의 항목 수, 테이블의 각 항목 크기 및 핀 설명자 테이블 자체를 필터 설명자에 자동으로 삽입합니다.
DEFINE_KSFILTER_CATEGORIES(Table) 테이블의 범주 수와 테이블 자체를 필터 설명자에 자동으로 삽입합니다.
DEFINE_KSFILTER_CATEGORIES_NULL 범주를 정의하지 않는 필터의 범주 멤버를 자동으로 채웁니다.
DEFINE_KSFILTER_NODE_DESCRIPTORS(테이블) 테이블의 항목 수, 테이블의 각 항목 크기 및 노드 설명자 테이블 자체를 필터 설명자에 자동으로 삽입합니다.
DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL 토폴로지 노드를 정의하지 않는 필터에 대한 노드 설명자 멤버를 자동으로 채웁니다.
DEFINE_KSFILTER_CONNECTIONS(Table) 테이블의 연결 수와 테이블 자체를 필터 설명자에 자동으로 삽입합니다.
DEFINE_KSFILTER_DEFAULT_CONNECTIONS 명시적 연결을 정의하지 않는 필터에 대한 연결 테이블을 자동으로 채웁니다.

DEFINE_KS_FILTER_PIN_DESCRIPTORS 사용하여 PinDescriptorSize를 설정하지 않으면 PinDescriptorSizesizeof(KSPIN_DESCRIPTOR_EX)로 설정해야 합니다.

마찬가지로 DEFINE_KS_FILTER_NODE_DESCRIPTORS 사용하여 NodeDescriptorSize를 설정하지 않으면 NodeDescriptorSizesizeof(KSNODE_DESCRIPTOR)로 설정해야 합니다.

요구 사항

요구 사항
헤더 ks.h(Ks.h 포함)

추가 정보

KSCOMPONENTID

KSFILTER_DISPATCH

KSNODE_DESCRIPTOR

KSPIN_DESCRIPTOR_EX

KSTOPOLOGY_CONNECTION

KsCreateFilterFactory