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