Поделиться через


Инициализация мини-накопителя BDA

Мини-накопитель BDA инициализируется так же, как и другие мини-накопители AVStream. Функция DriverEntry мини-драйвера BDA вызывает функцию AVStream KsInitializeDriver для инициализации объекта драйвера мини-driver BDA. В этом вызове мини-накопитель BDA передает указатель на структуру KSDEVICE_DESCRIPTOR , которая определяет характеристики устройства, которые могут включать:

  • Указатель на структуру KSDEVICE_DISPATCH , содержащую таблицу диспетчеризации для устройства BDA. Как минимум, мини-диск BDA должен предоставлять подпрограммы, которые создают и запускают устройство, и указывать эти подпрограммы в элементах Add и Start соответственно структуры KSDEVICE_DISPATCH. Подпрограмма создания мини-драйвера BDA должна выделять память для класса устройства и ссылаться на указатель на структуру KSDEVICE для устройства BDA на этот класс устройства. Подпрограмма запуска мини-драйвера BDA должна получать сведения об устройстве из реестра, задавать сведения об устройстве, а затем регистрировать группу статических структур шаблонов в библиотеке поддержки BDA. Дополнительные сведения см. в статье Запуск мини-драйвера BDA .

  • Массив KSFILTER_DESCRIPTOR структур для отдельных типов фильтров, поддерживаемых этим устройством. Этот тип структуры описывает характеристики фильтра, созданного заданной фабрикой фильтров. Необходимо указать элементы структур этого типа в этом массиве, если вы создаете мини-хранилище BDA, чтобы он не использовал библиотеку поддержки BDA (Bdasup.lib) для обработки свойств и наборов методов мини-driver 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