Freigeben über


Initialisieren eines BDA Minidrivers

Ein BDA-Minidriver wird ähnlich wie andere AVStream-Minitreiber initialisiert. Die DriverEntry-Funktion des BDA-Minitreibers ruft die AVStream-Funktion KsInitializeDriver auf, um das Treiberobjekt des BDA-Minitreibers zu initialisieren. In diesem Aufruf übergibt der BDA-Minitreiber einen Zeiger auf eine KSDEVICE_DESCRIPTOR-Struktur , die Merkmale des Geräts angibt, wie z. B.:

  • Ein Zeiger auf eine KSDEVICE_DISPATCH-Struktur , die die Dispatchtabelle für das BDA-Gerät enthält. Der BDA-Minitreiber sollte mindestens Routinen bereitstellen, die das Gerät erstellen und starten, und diese Routinen in den Membern Hinzufügen bzw . Starten der KSDEVICE_DISPATCH-Struktur angeben. Die Erstellungsroutine des BDA-Minitreibers sollte Arbeitsspeicher für die Geräteklasse zuordnen und den Zeiger auf die KSDEVICE-Struktur für das BDA-Gerät auf diese Geräteklasse verweisen. Die Startroutine des BDA-Minitreibers sollte Informationen über das Gerät aus der Registrierung abrufen, Informationen zum Gerät festlegen und dann eine Gruppe statischer Vorlagenstrukturen bei der BDA-Supportbibliothek registrieren. Weitere Informationen finden Sie unter Starten eines BDA Minidrivers .

  • Ein Array von KSFILTER_DESCRIPTOR Strukturen für die einzelnen Filtertypen, die von diesem Gerät unterstützt werden. Dieser Strukturtyp beschreibt die Merkmale eines Filters, der von einer bestimmten Filterfactory erstellt wurde. Sie sollten Elemente von Strukturen dieses Typs in diesem Array angeben, wenn Sie Ihren BDA-Minidriver erstellen, damit er nicht die BDA-Unterstützungsbibliothek (Bdasup.lib) verwendet, um die Eigenschaften und Methodensätze Ihres BDA-Minitreibers zu verarbeiten. Wenn Sie Ihren BDA-Minidriver so erstellen, dass er die BDA-Supportbibliothek verwendet, sollte Ihr BDA-Minitreiber stattdessen die BdaCreateFilterFactory-Unterstützungsfunktion aufrufen, um Filterfactorydeskriptoren (KSFILTER_DESCRIPTOR Strukturen) für Ihr Gerät hinzuzufügen. Weitere Informationen finden Sie unter Starten eines BDA Minidrivers .

Der folgende Codeausschnitt zeigt Beispiele für ein Array von Filterdeskriptoren, eine Dispatchtabelle für das BDA-Gerät und den Deskriptor für das BDA-Gerät:

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