Partilhar via


Inicializando um minidriver BDA

Um minidriver BDA é inicializado de forma semelhante a outros minidrivers AVStream. A função DriverEntry do minidriver BDA chama a função AVStream KsInitializeDriver para inicializar o objeto de driver do minidriver BDA. Nessa chamada, o minidriver BDA passa um ponteiro para uma estrutura KSDEVICE_DESCRIPTOR que especifica características do dispositivo, que pode incluir:

  • Um ponteiro para uma estrutura KSDEVICE_DISPATCH que contém a tabela de expedição para o dispositivo BDA. No mínimo, o minidriver BDA deve fornecer rotinas que criam e iniciam o dispositivo e especificam essas rotinas nos membros Adicionar e Iniciar , respectivamente, da estrutura KSDEVICE_DISPATCH. A rotina de criação do minidriver BDA deve alocar memória para a classe de dispositivo e referenciar o ponteiro para a estrutura KSDEVICE do dispositivo BDA para essa classe de dispositivo. A rotina de início do minidriver BDA deve obter informações sobre o dispositivo do registro, definir informações sobre o dispositivo e, em seguida, registrar um grupo de estruturas de modelo estático com a biblioteca de suporte do BDA. Consulte Iniciando um minidriver BDA para obter mais informações.

  • Uma matriz de estruturas de KSFILTER_DESCRIPTOR para os tipos de filtro individuais compatíveis com esse dispositivo. Esse tipo de estrutura descreve as características de um filtro criado por uma determinada fábrica de filtros. Você deve especificar membros de estruturas desse tipo nessa matriz se criar seu minidriver BDA para que ele não use a biblioteca de suporte do BDA (Bdasup.lib) para lidar com os conjuntos de propriedades e métodos do minidriver BDA. Se você criar seu minidriver BDA para que ele use a biblioteca de suporte do BDA, o minidriver BDA deverá chamar a função de suporte BdaCreateFilterFactory para adicionar descritores de fábrica de filtros (estruturas de KSFILTER_DESCRIPTOR) para seu dispositivo. Consulte Iniciando um minidriver BDA para obter mais informações.

O snippet de código a seguir mostra exemplos de uma matriz de descritores de filtro, uma tabela de expedição para o dispositivo BDA e o descritor para o dispositivo 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