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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für