BDA フィルターの構成

BDA ミニドライバーは、現在のフィルター グラフでミニドライバーのフィルター インスタンスを構成するために設定された KSMETHODSETID_BdaDeviceConfigurationメソッドセットのメソッド要求を処理します。

次のコード スニペットでは、KSMETHODSETID_BdaDeviceConfiguration メソッド セットの 2 つのメソッドが BDA サポート ライブラリに直接ディスパッチされ、残りのメソッドは最初に BDA ミニドライバーによってインターセプトされてから 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;
}

KSMETHOD_BDA_CREATE_TOPOLOGY メソッド要求は、ミニドライバーの CFilter::CreateTopology メソッドを呼び出します。 このメソッドは、BDA サポート ライブラリ関数 BdaMethodCreateTopology を呼び出して、フィルター ピン間のトポロジを作成します。 この関数は実際にリング 3 にトポロジ構造を作成します。これは、他のプロパティ セットのフィルターの既知の接続を反映しています。 BDA ミニドライバーは、特定のピン タイプを接続するときにハードウェアに特別な命令を送信する必要がある場合は、前のコード スニペットに示すように、KSMETHOD_BDA_CREATE_TOPOLOGYメソッド要求をインターセプトする必要があります。たとえば、BDA デバイスがハードウェア デマルチプレクシングを実行し、1 つの入力ピンからファンオフされた任意の数の出力ピンを作成する場合などです。