Определение топологии устройств BDA

Топология устройств BDA состоит из подключенной сети узлов, каждый из которых представляет некоторое преобразование по сигналу. Узлы можно группировать произвольно между различными фильтрами. Это произвольное группирование предоставляет поставщикам оборудования определенную свободу в том, как они реализуют свое оборудование и драйверы, чтобы такое оборудование и драйверы работали в универсальном формате с поставщиками сетей для различных типов сетей, которые они хотят поддерживать.

Для работы этой архитектуры произвольной группировки поставщик сети должен иметь возможность запрашивать фильтры о том, какие преобразования эти фильтры выполняют по сигналу (то есть, какие типы сетей узлов может поддерживать фильтр). Базовый мини-диск Ring 0 для фильтра передает поставщику сети изображение поддерживаемых сетей узлов через набор свойств KSPROPSETID_BdaTopology .

При определении топологии шаблона для фильтра поставщик сети выполняет итерацию списков типов узлов и типов закрепления, запрашивает каждый узел и закрепляет его возможности. Поставщик сети использует следующие свойства KSPROPSETID_BdaTopology для определения топологии шаблона для фильтра:

  • KSPROPERTY_BDA_NODE_TYPES

    Типы узлов представляют возможные функциональные узлы в фильтре. Свойство KSPROPERTY_BDA_NODE_TYPES возвращает список всех типов узлов, предоставляемых экземпляром фильтра мини-накопителя BDA. Мини-диск присваивает произвольные значения для идентификации типов узлов. Как правило, мини-диск использует индекс каждого элемента в списке типов узлов мини-диска в качестве значения для каждого типа узла. Мини-накопитель BDA назначает каждому типу узла GUID описания узла. Идентификаторы GUID описания для типов узлов, которые в настоящее время поддерживает поставщик сети, определены в bdamedia.h. Это описание узла указывает поставщику сети, что делает узел. В топологии шаблона тип узла может встречаться только один раз. Однако несколько узлов определенного типа могут иметь один и тот же GUID описания узла. Это позволяет выполнять определенное преобразование сигнала в нескольких местах топологии фильтра, позволяя поставщику сети однозначно идентифицировать один узел топологии.

  • KSPROPERTY_BDA_PIN_TYPES

    Типы закрепления представляют возможные подключения к другим фильтрам в графе. Свойство KSPROPERTY_BDA_PIN_TYPES возвращает список всех типов контактов, которые можно создать в фильтре. В топологии шаблона тип закрепления может возникать только один раз.

  • KSPROPERTY_BDA_TEMPLATE_CONNECTIONS

    Свойство KSPROPERTY_BDA_TEMPLATE_CONNECTIONS возвращает массив, представляющий все возможные соединения между типами узлов и типами контактов, которые можно настроить в фильтре. Дополнительные сведения см. в разделе Топология сопоставления подключений .

Когда экземпляр фильтра впервые создается и добавляется в граф, он обычно имеет входные контакты, но не содержит выходных контактов. Чтобы создать выходные контакты, поставщик сети сначала использует свойства KSPROPSETID_BdaTopology, чтобы определить, какие операции может выполнять фильтр. На основе этих свойств поставщик сети определяет, какие операции требуется выполнить фильтру для определенного графа фильтра. Затем поставщик сети использует набор методов KSMETHODSETID_BdaDeviceConfiguration , чтобы создать выходные контакты, соответствующие конкретному типу контактов, и создать внутреннюю топологию, которая является фактическим аппаратным путем, между этими контактами и входными контактами. Дополнительные сведения см. в статье Настройка фильтра BDA .

В следующем фрагменте кода показано, как определить функции, экспортированные библиотекой поддержки BDA, в качестве подпрограмм диспетчеризации для набора свойств KSPROPSETID_BdaTopology:

//
//  KSPROPSETID_BdaTopology property set
//
//  Defines the dispatch routines for the filter level
//  topology properties
//
DEFINE_KSPROPERTY_TABLE(FilterTopologyProperties)
{
    DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(
        BdaPropertyNodeTypes,
        NULL
        ),
    DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(
        BdaPropertyPinTypes,
        NULL
        ),
    DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(
        BdaPropertyTemplateConnections,
        NULL
        ),
    DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(
        BdaPropertyGetControllingPinId,
        NULL
        )
};