Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Минидрайвер BDA обрабатывает запросы метода KSMETHODSETID_BdaDeviceConfiguration, чтобы настроить экземпляр фильтра для минидрайвера в текущем графе фильтров.
В следующем фрагменте кода два метода из набора KSMETHODSETID_BdaDeviceConfiguration отправляются непосредственно в библиотеку поддержки BDA, а оставшийся метод сначала перехватывается минидрайвером BDA перед отправкой в библиотеку поддержки.
//
// BDA Device Configuration Method Set
//
// Defines the dispatch routines for the filter level
// topology configuration methods
//
DEFINE_KSMETHOD_TABLE(BdaDeviceConfigurationMethods)
{
DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY(
BdaMethodCreatePin,
NULL
),
DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY(
BdaMethodDeletePin,
NULL
),
DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY(
CFilter::CreateTopology,
NULL
)
};
/*
** CreateTopology()
**
** Keeps track of topology association between input and output pins
**
*/
NTSTATUS
CFilter::
CreateTopology(
IN PIRP pIrp,
IN PKSMETHOD pKSMethod,
PVOID pvIgnored
)
{
NTSTATUS Status = STATUS_SUCCESS;
CFilter * pFilter;
ULONG ulPinType;
PKSFILTER pKSFilter;
ASSERT( pIrp);
ASSERT( pKSMethod);
// Obtain a "this" pointer for the method.
//
// Because this function is called directly from the property
// dispatch table, get pointer to the underlying object.
//
pFilter = FilterFromIRP( pIrp);
ASSERT( pFilter);
if (!pFilter)
{
Status = STATUS_INVALID_PARAMETER;
goto errExit;
}
// Let the BDA support library create the standard topology.
// It will also validate the method, instance count, etc.
//
Status = BdaMethodCreateTopology( pIrp, pKSMethod, pvIgnored);
if (Status != STATUS_SUCCESS)
{
goto errExit;
}
// This is where the filter can keep track of associated pins.
//
errExit:
return Status;
}
Запрос метода KSMETHOD_BDA_CREATE_TOPOLOGY вызывает метод CFilter::CreateTopology минидрайвера. Этот метод вызывает функцию библиотеки поддержки BDA BdaMethodCreateTopology для создания топологии между выводами фильтра. Эта функция фактически создает структуру топологии в Ring 3, которая отражает известные подключения фильтра для других наборов свойств. Минидрайвер BDA должен перехватывать запрос метода KSMETHOD_BDA_CREATE_TOPOLOGY, как показано в приведенном выше фрагменте кода, если этот минидрайвер должен отправлять специальные инструкции оборудованию при подключении определенных типов контактов, например, если устройство BDA выполняет аппаратное демультиплексирование и создает произвольное количество выходных контактов, ответвленных от одного входного контакта.