Initialisation d’un minidriver BDA
Un minidriver BDA est initialisé de la même façon que d’autres minidrivers AVStream. La fonction DriverEntry du minidriver BDA appelle la fonction AVStream KsInitializeDriver pour initialiser l’objet pilote du minidriver BDA. Dans cet appel, le minidriver BDA passe un pointeur vers une structure KSDEVICE_DESCRIPTOR qui spécifie les caractéristiques de l’appareil, qui peuvent inclure :
Pointeur vers une structure de KSDEVICE_DISPATCH qui contient la table de répartition pour l’appareil BDA. Au minimum, le minidriver BDA doit fournir des routines qui créent et démarrent l’appareil et spécifient ces routines dans les membres Ajouter et Démarrer respectivement de la structure KSDEVICE_DISPATCH. La routine de création du minidriver BDA doit allouer de la mémoire pour la classe d’appareil et référencer le pointeur vers la structure KSDEVICE de l’appareil BDA vers cette classe d’appareil. La routine de démarrage du minidriver BDA doit obtenir des informations sur l’appareil à partir du registre, définir des informations sur l’appareil, puis inscrire un groupe de structures de modèles statiques auprès de la bibliothèque de prise en charge BDA. Pour plus d’informations, consultez Démarrage d’un minidriver BDA .
Tableau de structures KSFILTER_DESCRIPTOR pour les types de filtres individuels pris en charge par cet appareil. Ce type de structure décrit les caractéristiques d’un filtre créé par une fabrique de filtres donnée. Vous devez spécifier des membres de structures de ce type dans ce tableau si vous créez votre minidriver BDA afin qu’il n’utilise pas la bibliothèque de prise en charge BDA (Bdasup.lib) pour gérer les jeux de propriétés et de méthodes de votre minidriver BDA. Si vous créez votre minidriver BDA afin qu’il utilise la bibliothèque de prise en charge BDA, votre minidriver BDA doit à la place appeler la fonction de support BdaCreateFilterFactory pour ajouter des descripteurs de fabrique de filtre (KSFILTER_DESCRIPTOR structures) pour votre appareil. Pour plus d’informations, consultez Démarrage d’un minidriver BDA .
L’extrait de code suivant montre des exemples de tableau de descripteurs de filtre, une table de répartition pour l’appareil BDA et le descripteur pour l’appareil 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