Condividi tramite


Inizializzazione di un minidriver BDA

Un minidriver BDA viene inizializzato in modo analogo ad altri minidriver AVStream. La funzione DriverEntry di BDA chiama la funzione AVStream KsInitializeDriver per inizializzare l'oggetto driver di BDA. In questa chiamata, il minidriver BDA passa un puntatore a una struttura KSDEVICE_DESCRIPTOR che specifica le caratteristiche del dispositivo, che può includere:

  • Puntatore a una struttura KSDEVICE_DISPATCH che contiene la tabella di invio per il dispositivo BDA. Almeno, il minidriver BDA deve fornire routine che creano e avviano il dispositivo e specificano queste routine rispettivamente nei membri Aggiungi e Avvia della struttura KSDEVICE_DISPATCH. La routine di creazione del minidriver BDA deve allocare memoria per la classe di dispositivo e fare riferimento al puntatore alla struttura KSDEVICE per il dispositivo BDA a questa classe di dispositivo. La routine iniziale del minidriver BDA deve ottenere informazioni sul dispositivo dal Registro di sistema, impostare informazioni sul dispositivo e quindi registrare un gruppo di strutture modello statiche con la libreria di supporto BDA. Per altre informazioni, vedere Avvio di un minidriver BDA .

  • Matrice di strutture KSFILTER_DESCRIPTOR per i singoli tipi di filtro supportati da questo dispositivo. Questo tipo di struttura descrive le caratteristiche di un filtro creato da una determinata factory di filtro. È necessario specificare i membri di strutture di questo tipo in questa matrice se si crea il minidriver BDA in modo che non usi la libreria di supporto BDA (Bdasup.lib) per gestire le proprietà e i set di metodi di BDA minidriver. Se si crea il minidriver BDA in modo che usi la libreria di supporto BDA, il minidriver BDA deve invece chiamare la funzione di supporto BdaCreateFilterFactory per aggiungere descrittori della factory di filtro (KSFILTER_DESCRIPTOR strutture) per il dispositivo. Per altre informazioni, vedere Avvio di un minidriver BDA .

Il frammento di codice seguente mostra esempi di una matrice di descrittori di filtro, una tabella di invio per il dispositivo BDA e il descrittore per il 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