初始化 BDA 微型驱动程序

BDA 微型驱动程序的初始化方式与其他 AVStream 微型驱动程序类似。 BDA 微型驱动程序的 DriverEntry 函数调用 AVStream KsInitializeDriver 函数来初始化 BDA 微型驱动程序的驱动程序对象。 在此调用中,BDA 微型 驱动程序将一个指针KSDEVICE_DESCRIPTOR一个指定设备特征的指针,该结构可能包括:

  • 指向包含 BDA KSDEVICE_DISPATCH 调度表的架构的指针。 BDA 微型驱动程序至少应提供创建和启动设备的例程,并分别在"添加"和"启动"成员中指定KSDEVICE_DISPATCH成员。 BDA 微型驱动程序的 create 例程应为设备类分配内存,并引用指向 BDA 设备的 KSDEVICE 结构的指针到此设备类。 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