Mengonfigurasi Filter BDA

Minidriver BDA memproses permintaan metode dari metode KSMETHODSETID_BdaDeviceConfiguration yang diatur untuk mengonfigurasi instans filter untuk minidriver dalam grafik filter saat ini.

Dalam cuplikan kode berikut, dua metode set metode KSMETHODSETID_BdaDeviceConfiguration dikirim langsung ke pustaka dukungan BDA dan metode yang tersisa terlebih dahulu dicegat oleh minidriver BDA sebelum dikirim ke pustaka dukungan 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;
}

Permintaan metode KSMETHOD_BDA_CREATE_TOPOLOGY memanggil metode CFilter::CreateTopology minidriver. Metode ini memanggil fungsi pustaka dukungan BDA BdaMethodCreateTopology untuk membuat topologi di antara pin filter. Fungsi ini sebenarnya membuat struktur topologi di Ring 3, yang mencerminkan, untuk set properti lain, koneksi filter yang diketahui. Minidriver BDA harus mencegat permintaan metode KSMETHOD_BDA_CREATE_TOPOLOGY seperti yang ditunjukkan dalam cuplikan kode sebelumnya jika minidriver tersebut harus mengirim instruksi khusus ke perangkat keras saat menyambungkan jenis pin tertentu--misalnya, jika perangkat BDA melakukan demultiplexing perangkat keras dan membuat jumlah pin output arbitrer yang disambungkan dari satu pin input.