Delen via


Een BDA Minidriver initialiseren

Een BDA minidriver wordt geïnitialiseerd op dezelfde manier als andere AVStream minidrivers. De functie DriverEntry van de BDA minidriver roept de functie AVStream KsInitializeDriver aan om het stuurprogrammaobject van de BDA minidriver te initialiseren. In deze aanroep geeft de BDA minidriver een aanwijzer door aan een KSDEVICE_DESCRIPTOR structuur die kenmerken van het apparaat aangeeft, waaronder:

  • Een aanwijzer naar een KSDEVICE_DISPATCH structuur die de verzendtabel voor het BDA-apparaat bevat. De BDA-minidriver moet minimaal routines leveren die het apparaat creëren en starten, en specificeer deze routines respectievelijk in de Add en Start leden van de KSDEVICE_DISPATCH-structuur. De routine voor het maken van de BDA-minidriver moet geheugen toewijzen aan de apparaatklasse en verwijzen naar de KSDEVICE-structuur voor het BDA-apparaat naar deze apparaatklasse. De startroutine van de BDA minidriver moet informatie over het apparaat uit het register ophalen, informatie over het apparaat instellen en vervolgens een groep statische sjabloonstructuren registreren bij de BDA-ondersteuningsbibliotheek. Zie Een BDA Minidriver starten voor meer informatie.

  • Een matrix van KSFILTER_DESCRIPTOR structuren voor de afzonderlijke filtertypen die door dit apparaat worden ondersteund. Dit structuurtype beschrijft de kenmerken van een filter dat is gemaakt door een bepaalde filterfactory. U moet leden van structuren van dit type in deze matrix opgeven als u uw BDA minidriver maakt, zodat de BDA-ondersteuningsbibliotheek (Bdasup.lib) niet wordt gebruikt om de eigenschappen- en methodesets van uw BDA minidriver te verwerken. Als u uw BDA minidriver maakt zodat deze gebruikmaakt van de BDA-ondersteuningsbibliotheek, moet uw BDA minidriver in plaats daarvan de BdaCreateFilterFactory-ondersteuningsfunctie aanroepen om filterfactorydescriptors (KSFILTER_DESCRIPTOR structuren) voor uw apparaat toe te voegen. Zie Een BDA Minidriver starten voor meer informatie.

In het volgende codefragment ziet u voorbeelden van een matrix met filterdescriptors, een verzendtabel voor het BDA-apparaat en de descriptor voor het BDA-apparaat:

//
//  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