연결 토폴로지 매핑
BDA 지원 라이브러리가 BDA 미니드라이버를 대신하여 링 3의 애플리케이션에 속성과 메서드를 제공하려면 BDA 미니드라이버가 BDA 지원 라이브러리에 대한 연결 토폴로지 매핑을 제공해야 합니다. BDA 미니드라이버에서는 BDA_TEMPLATE_CONNECTION 구조의 배열에서 이 매핑을 제공합니다. BDA 미니드라이버가 BdaCreateFilterFactory 지원 함수를 호출할 때 이 BDA_TEMPLATE_CONNECTION 배열을 KSTOPOLOGY_CONNECTION 구조 배열에 전달합니다. 자세한 내용은 BDA 미니드라이버 시작을 참조하세요. 이 배열은 필터 내에서 또는 필터와 인접 필터 간에 만들 수 있는 노드 및 핀 형식 간의 가능한 모든 연결을 표현합니다.
네트워크 공급자 필터는 이후에 BDA 미니드라이버의 필터 instance 설정된 KSPROPSETID_BdaTopology 속성의 KSPROPERTY_BDA_TEMPLATE_CONNECTIONS 속성 요청을 만들어 미니드라이버의 연결 토폴로지를 검색할 수 있습니다. BDA 미니드라이버에서는 BdaPropertyTemplateConnections 지원 함수를 호출합니다. 이 함수는 KSTOPOLOGY_CONNECTION 구조 배열에서 필터의 템플릿 연결(BDA_TEMPLATE_CONNECTION 구조체) 목록을 반환합니다. BDA_TEMPLATE_CONNECTION 구조체의 멤버는 다음 연결의 노드 및 핀 형식 쌍을 식별합니다.
연결이 시작되는 노드 및 핀 형식
연결이 끝나는 노드 및 핀 형식
노드 형식을 값 -1로 설정하면 연결이 각각 업스트림 또는 다운스트림 필터의 핀에서 시작되거나 종료됨을 나타냅니다. 그렇지 않으면 노드 형식의 값은 내부 노드 형식의 0부터 시작하는 배열에 있는 요소의 인덱스에 해당합니다. 이 배열은 KSNODE_DESCRIPTOR 구조체의 배열입니다. 핀 형식의 값은 BDA 미니드라이버의 템플릿 필터 설명자에서 사용할 수 있는 핀 형식의 0부터 시작하는 배열에 있는 요소의 인덱스에 해당합니다. 이 배열은 KSPIN_DESCRIPTOR_EX 구조체의 배열입니다.
다음 코드 조각은 BDA 미니드라이버의 템플릿 필터 설명자에서 사용할 수 있는 노드 형식 및 핀 형식의 예제 배열을 보여 줍니다.
//
// Template Node Descriptors
//
// This array describes all Node Types available in the template
// topology of the filter.
//
const
KSNODE_DESCRIPTOR
NodeDescriptors[] =
{
{ // 0 node type
&RFTunerNodeAutomation,// PKSAUTOMATION_TABLE AutomationTable;
&KSNODE_BDA_RF_TUNER, // Type
NULL // Name
},
{ // 1 node type
&VSB8DemodulatorNodeAutomation, // PKSAUTOMATION_TABLE
// AutomationTable;
&KSNODE_BDA_8VSB_DEMODULATOR, // Type
NULL // Name
}
};
//
// Template Pin Descriptors
//
// This data structure defines the pin types available in the filters
// template topology. These structures will be used to create a
// pin factory ID for a pin type when BdaMethodCreatePin is called.
//
const
KSPIN_DESCRIPTOR_EX
TemplatePinDescriptors[] =
{
// Antenna Pin
// 0 pin type
{
&AntennaPinDispatch,
&AntennaAutomation, // AntennaPinAutomation
{
0, // Interfaces
NULL,
0, // Mediums
NULL,
SIZEOF_ARRAY(AntennaPinRanges),
AntennaPinRanges,
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_BOTH,
NULL, // Name
NULL, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1, // InstancesPossible
0, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
},
// Transport Pin
// 1 pin type
{
&TransportPinDispatch,
&TransportAutomation, // TransportPinAutomation
{
0, // Interfaces
NULL,
1, // Mediums
&TransportPinMedium,
SIZEOF_ARRAY(TransportPinRanges),
TransportPinRanges,
KSPIN_DATAFLOW_OUT,
KSPIN_COMMUNICATION_BOTH,
(GUID *) &PINNAME_BDA_TRANSPORT, // Name
(GUID *) &PINNAME_BDA_TRANSPORT, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1,
1, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
}
};
다음 코드 조각은 템플릿 연결 및 조인트 배열의 예를 보여 줍니다.
//
// BDA Template Topology Connections
//
// Lists the possible connections between pin types and
// node types. This structure along with the BDA_FILTER_TEMPLATE,
// KSFILTER_DESCRIPTOR, and BDA_PIN_PAIRING structures
// describe how topologies are created in the filter.
//
const
KSTOPOLOGY_CONNECTION TemplateTunerConnections[] =
{
{ -1, 0, 0, 0}, // from upstream filter to 0 pin of 0 node
{ 0, 1, 1, 0}, // from 1 pin of 0 node to 0 pin of 1 node
{ 1, 1, -1, 1}, // from 1 pin of 1 node to downstream filter
};
//
// Lists the template joints between antenna (input) and transport
// (output) pin types. Values given to joints correspond to indexes
// of elements in the preceding KSTOPOLOGY_CONNECTION array.
//
// For this template topology, the RF node (0) belongs to the antenna
// pin and the 8VSB demodulator node (1) belongs to the transport pin
//
const
ULONG AntennaTransportJoints[] =
{
1 // Second element in the preceding KSTOPOLOGY_CONNECTION array.
};