Udostępnij przez


Inicjowanie minidrivera BDA

Minidriver BDA jest inicjowany podobnie do innych minidriverów AVStream. Funkcja DriverEntry minidrivera BDA wywołuje funkcję AVStream KsInitializeDriver w celu zainicjowania obiektu sterownika minidrivera BDA. W tym wywołaniu minidriver BDA przekazuje wskaźnik do struktury KSDEVICE_DESCRIPTOR , która określa cechy urządzenia, które mogą obejmować:

  • Wskaźnik do struktury KSDEVICE_DISPATCH zawierającej tabelę wysyłania dla urządzenia BDA. Co najmniej minidriver BDA powinien dostarczyć procedury, które tworzą i uruchamiają urządzenie i określają te procedury odpowiednio w strukturze dodawania i uruchamiania KSDEVICE_DISPATCH. Procedura tworzenia minidrivera BDA powinna przydzielić pamięć dla klasy urządzenia i odnosić wskaźnik do struktury KSDEVICE dla urządzenia BDA dla tej klasy urządzenia. Procedury uruchamiania minidrivera BDA powinny uzyskać informacje o urządzeniu z rejestru, ustawić informacje o urządzeniu, a następnie zarejestrować grupę statycznych struktur szablonów w bibliotece obsługi BDA. Aby uzyskać więcej informacji, zobacz Uruchamianie minidrivera BDA .

  • Tablica struktur KSFILTER_DESCRIPTOR dla poszczególnych typów filtrów obsługiwanych przez to urządzenie. Ten typ struktury opisuje charakterystykę filtru utworzonego przez daną fabrykę filtrów. Należy określić elementy członkowskie struktur tego typu w tej tablicy, jeśli tworzysz minidriver BDA tak, aby nie używał biblioteki obsługi BDA (Bdasup.lib) do obsługi właściwości i zestawów metod BDA. Jeśli tworzysz minidriver BDA, który korzysta z biblioteki obsługi BDA, powinien on wywołać funkcję obsługi BdaCreateFilterFactory, aby dodać deskryptory fabryki filtrów (struktury KSFILTER_DESCRIPTOR) dla swojego urządzenia. Aby uzyskać więcej informacji, zobacz Uruchamianie minidrivera BDA .

Poniższy fragment kodu przedstawia przykłady tablicy deskryptorów filtrów, tabeli wysyłki dla urządzenia BDA i deskryptora dla urządzenia 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