Konfigurieren eines BDA-Filters

Ein BDA-Minidriver verarbeitet Methodenanforderungen der KSMETHODSETID_BdaDeviceConfiguration-Methode, die festgelegt ist, um einen Filter instance für den Minitreiber im aktuellen Filterdiagramm zu konfigurieren.

Im folgenden Codeausschnitt werden zwei der Methoden des KSMETHODSETID_BdaDeviceConfiguration Methodensatzes direkt an die BDA-Unterstützungsbibliothek verteilt, und die verbleibende Methode wird zuerst vom BDA-Minidriver abgefangen, bevor sie an die BDA-Supportbibliothek verteilt wird.

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

Die KSMETHOD_BDA_CREATE_TOPOLOGY-Methodenanforderung ruft die CFilter::CreateTopology-Methode des Minitreibers auf. Diese Methode ruft die BDA-Unterstützungsbibliotheksfunktion BdaMethodCreateTopology auf, um eine Topologie zwischen Filternadeln zu erstellen. Diese Funktion erstellt tatsächlich eine Topologiestruktur in Ring 3, die für andere Eigenschaftssätze die bekannten Verbindungen des Filters widerspiegelt. Ein BDA-Minidriver sollte die KSMETHOD_BDA_CREATE_TOPOLOGY-Methodenanforderung wie im vorherigen Codeausschnitt gezeigt abfangen, wenn dieser Minitreiber beim Verbinden bestimmter Pintypen spezielle Anweisungen an die Hardware senden muss, z. B. wenn das BDA-Gerät Hardwaredemultiplexing durchführt und eine beliebige Anzahl von Ausgabepins erstellt, die von einem einzelnen Eingabenadel abgespeckt werden.