Condividi tramite


Configurazione di un filtro BDA

Un minidriver BDA elabora le richieste di metodo del metodo KSMETHODSETID_BdaDeviceConfiguration impostato per configurare un'istanza di filtro per il minidriver nel grafico di filtro corrente.

Nel frammento di codice seguente, due dei metodi del set di metodi KSMETHODSETID_BdaDeviceConfiguration vengono inviati direttamente alla libreria di supporto BDA e il metodo rimanente viene prima intercettato dal minidriver BDA prima di inviare alla libreria di supporto BDA.

//
//  BDA Device Configuration Method Set
//
//  Defines the dispatch routines for the filter level
//  topology configuration methods
//
DEFINE_KSMETHOD_TABLE(BdaDeviceConfigurationMethods)
{
    DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY(
        BdaMethodCreatePin,
        NULL
        ),
    DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY(
        BdaMethodDeletePin,
        NULL
        ),
    DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY(
        CFilter::CreateTopology,
        NULL
        )
};
/*
** CreateTopology()
**
** Keeps track of topology association between input and output pins
**
*/
NTSTATUS
CFilter::
CreateTopology(
    IN PIRP         pIrp,
    IN PKSMETHOD    pKSMethod,
    PVOID           pvIgnored
    )
{
    NTSTATUS            Status = STATUS_SUCCESS;
    CFilter *           pFilter;
    ULONG               ulPinType;
    PKSFILTER           pKSFilter;

    ASSERT( pIrp);
    ASSERT( pKSMethod);

    //  Obtain a "this" pointer for the method.
    //
    //  Because this function is called directly from the property 
    //  dispatch table, get pointer to the underlying object.
    //
    pFilter = FilterFromIRP( pIrp);
    ASSERT( pFilter);
    if (!pFilter)
    {
        Status = STATUS_INVALID_PARAMETER;
        goto errExit;
    }

    //  Let the BDA support library create the standard topology.
    //  It will also validate the method, instance count, etc.
    //
    Status = BdaMethodCreateTopology( pIrp, pKSMethod, pvIgnored);
    if (Status != STATUS_SUCCESS)
    {
        goto errExit;
    }

    //  This is where the filter can keep track of associated pins.
    //
errExit:
    return Status;
}

La richiesta del metodo KSMETHOD_BDA_CREATE_TOPOLOGY chiama il metodo CFilter::CreateTopology del minidriver. Questo metodo chiama la funzione di libreria di supporto BDA BdaMethodCreateTopology per creare una topologia tra pin di filtro. Questa funzione crea effettivamente una struttura di topologia nel circuito 3, che riflette, per altri set di proprietà, le connessioni note del filtro. Un minidriver BDA deve intercettare la richiesta del metodo KSMETHOD_BDA_CREATE_TOPOLOGY, come illustrato nel frammento di codice precedente, se tale minidriver deve inviare istruzioni speciali all'hardware durante la connessione di determinati tipi di pin, ad esempio se il dispositivo BDA esegue il demultiplexing hardware e crea un numero arbitrario di pin di output fan off da un singolo pin di input.