Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Минидрайвер BDA инициализируется аналогично другим минидрайверам AVStream. Функция DriverEntry minidriver BDA вызывает функцию AVStream KsInitializeDriver для инициализации объекта драйвера minidriver BDA. В этом вызове минидрайвер BDA передает указатель на структуру KSDEVICE_DESCRIPTOR, указывающую характеристики устройства, которые могут включать:
Указатель на структуру KSDEVICE_DISPATCH , содержащую таблицу отправки для устройства BDA. По крайней мере минидрайвер BDA должен предоставлять подпрограммы, которые создают и запускают устройство, и указывает эти подпрограммы в элементах Add и Start соответственно структуры KSDEVICE_DISPATCH. Создающая процедура минидрайвера BDA должна выделять память для класса устройства и присвоить указатель на структуру KSDEVICE этого класса для устройства BDA. Подпрограмма запуска минидрайвера BDA должна получить сведения об устройстве из реестра, установить сведений об устройстве, а затем зарегистрировать группу статических шаблонных структур в библиотеке поддержки BDA. Дополнительные сведения см. в статье "Запуск минидрайвера BDA".
Массив структур KSFILTER_DESCRIPTOR для отдельных типов фильтров, поддерживаемых этим устройством. Этот тип структуры описывает характеристики фильтра, созданного заданной фабрикой фильтров. При создании минидрайвера BDA необходимо указать элементы структур этого типа в этом массиве, чтобы не использовать библиотеку поддержки BDA (Bdasup.lib) для работы с наборами свойств и методов вашего минидрайвера BDA. Если вы создаете минидрайвер BDA, чтобы он использовал библиотеку поддержки BDA, то ваш минидрайвер BDA должен вместо этого вызвать поддерживающую функцию BdaCreateFilterFactory, чтобы добавить дескрипторы фабрики фильтров (структуры KSFILTER_DESCRIPTOR) для вашего устройства. Дополнительные сведения см. в статье "Запуск минидрайвера BDA".
В следующем фрагменте кода показаны примеры массива дескрипторов фильтров, таблицы отправки для устройства BDA и дескриптора для устройства BDA:
//
// Array containing descriptors for all filter factories
// available on the device.
//
// Note! Only used when dynamic topology is not used (that is,
// only when filters and pins are fixed). Typically, this
// is when the network provider is not present.
//
DEFINE_KSFILTER_DESCRIPTOR_TABLE(FilterDescriptors)
{
&TemplateTunerFilterDescriptor
};
//
// Device Dispatch Table
//
// Lists the dispatch routines for the major events related to
// the underlying device.
//
extern
const
KSDEVICE_DISPATCH
DeviceDispatch =
{
CDevice::Create, // Add
CDevice::Start, // Start
NULL, // PostStart
NULL, // QueryStop
NULL, // CancelStop
NULL, // Stop
NULL, // QueryRemove
NULL, // CancelRemove
NULL, // Remove
NULL, // QueryCapabilities
NULL, // SurpriseRemoval
NULL, // QueryPower
NULL // SetPower
};
//
// Device Descriptor
//
// Brings together the data structures that define the device and
// the initial filter factories that can be created on it.
// Note that because template topology structures are specific
// to BDA, the device descriptor does not include them.
// Note also that if BDA dynamic topology is used, the device
// descriptor does not specify a list of filter factory descriptors.
// If BDA dynamic topology is used, the BDA minidriver calls
// BdaCreateFilterFactory to add filter factory descriptors.
extern
const
KSDEVICE_DESCRIPTOR
DeviceDescriptor =
{
&DeviceDispatch, // Dispatch
#ifdef DYNAMIC_TOPOLOGY // network provider is present
0, // FilterDescriptorsCount
NULL, // FilterDescriptors
#else // network provider is not present
SIZEOF_ARRAY( FilterDescriptors), // FilterDescriptorsCount
FilterDescriptors // FilterDescriptors
#endif // DYNAMIC_TOPOLOGY