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;