Partager via


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