Compartir a través de


Inicialización de un minidriver de BDA

Un minidriver BDA se inicializa de forma similar a otros minidrivers avStream. La función DriverEntry del minidriver de BDA llama a la función AVStream KsInitializeDriver para inicializar el objeto de controlador del minidriver de BDA. En esta llamada, el minidriver BDA pasa un puntero a una estructura KSDEVICE_DESCRIPTOR que especifica las características del dispositivo, que pueden incluir:

  • Puntero a una estructura de KSDEVICE_DISPATCH que contiene la tabla de distribución para el dispositivo BDA. Como mínimo, el minidriver BDA debe proporcionar rutinas que creen e inicien el dispositivo y especifiquen estas rutinas en los miembros Add e Start respectivamente de la estructura KSDEVICE_DISPATCH. La rutina de creación del minidriver de BDA debe asignar memoria para la clase de dispositivo y hacer referencia al puntero a la estructura KSDEVICE del dispositivo BDA a esta clase de dispositivo. La rutina de inicio del minidriver de BDA debe obtener información sobre el dispositivo desde el registro, establecer información sobre el dispositivo y, a continuación, registrar un grupo de estructuras de plantilla estáticas con la biblioteca de compatibilidad de BDA. Vea Iniciar un minidriver de BDA para obtener más información.

  • Matriz de estructuras de KSFILTER_DESCRIPTOR para los tipos de filtro individuales admitidos por este dispositivo. Este tipo de estructura describe las características de un filtro creado por un generador de filtros determinado. Debe especificar miembros de estructuras de este tipo en esta matriz si crea el minidriver de BDA para que no use la biblioteca de compatibilidad de BDA (Bdasup.lib) para controlar la propiedad y los conjuntos de métodos del minidriver de BDA. Si crea el minidriver de BDA para que use la biblioteca de compatibilidad de BDA, el minidriver de BDA debe llamar a la función de compatibilidad BdaCreateFilterFactory para agregar descriptores de fábrica de filtros (estructuras de KSFILTER_DESCRIPTOR) para el dispositivo. Vea Iniciar un minidriver de BDA para obtener más información.

En el fragmento de código siguiente se muestran ejemplos de una matriz de descriptores de filtro, una tabla de distribución para el dispositivo BDA y el descriptor para el 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