次の方法で共有


WDI TLV ジェネレーター インターフェイスの概要

C++ のオーバーロードされた関数モデル

このモデルでは、データ構造から TLV バイト配列を生成する関数呼び出しは 1 つだけです。

WDI_INDICATION_BSS_ENTRY_LIST_PARAMETERS BssEntryList = ...;
BYTE* pOutput = NULL;
ULONG length = 0;
NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS;

ndisStatus = Generate(
    &BssEntryList,
    cbHeaderLength,
    &Context,
    &length,
    &pOutput);

2 番目のパラメーターは非常に役に立つことがあります。 TLV バッファーが大きなデータ構造にパックされることがあり、このパラメーターを使用すると、そのヘッダーのバッファーの先頭に空間を事前に予約できます。 多くの場合、cbHeaderLength の正しい値は sizeof(WDI_MESSAGE_HEADER) です。

データが関連付けられていないメッセージの場合、オーバーロードされた Generate API は引き続き存在しますが、最初のパラメーターは省略可能であり、単に (EmptyMessageStructureType*)NULL として渡すことができます。

pOutput に含まれる TLV データの使用が完了したら、ライブラリにコールバックしてバッファーを解放する必要があります。

    FreeGenerated(pOutput);
    pOutput = NULL;

C スタイルの関数モデル

このモデルでは、C でオーバーロードされた関数がサポートされていないため、最上位レベルのメッセージまたは構造体ごとに特定の Generate ルーチンがあります。 それ以外については、C++ モデルと同じように動作します。

ndisStatus = GenerateWdiGetAdapterCapabilities(
    &adapterCapabilities,
    (ULONG)sizeof(WFC_COMMAND_HEADER),
    &Context,
    &length,
    &pOutput);

TLV バイト配列の使用が完了したら、C++ モデルと同じようにコールバックしてメモリを解放します。

    FreeGenerated(pOutput);
    pOutput = NULL;