WDI TLV 產生器介面概觀
C++ 多載函式模型
在此模型中,只有一個函式呼叫可從您的資料結構產生 TLV 位元組陣列。
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);
第二個參數非常有用。 有時候,TLV 緩衝區會封裝成較大的資料結構,而此參數可讓您預先保留該標頭緩衝區開頭的空間。
cbHeaderLength的正確值通常是 sizeof(WDI_MESSAGE_HEADER)
。
對於沒有相關聯資料的訊息,仍有多載的產生 API,但第一個參數是選擇性的,而且可能只是以 的形式 (EmptyMessageStructureType*)NULL
傳入。
當您完成 pOutput中包含的 TLV 資料時,您必須回呼程式庫以釋放緩衝區。
FreeGenerated(pOutput);
pOutput = NULL;
C 樣式函式模型
在此模型中,每個最上層訊息或結構都有特定的 Generate 常式,因為 C 不支援多載函式。 否則,其行為與 C++ 模型相同。
ndisStatus = GenerateWdiGetAdapterCapabilities(
&adapterCapabilities,
(ULONG)sizeof(WFC_COMMAND_HEADER),
&Context,
&length,
&pOutput);
當您使用 TLV 位元組陣列完成時,請回呼以與 C++ 模型相同的方式釋放記憶體。
FreeGenerated(pOutput);
pOutput = NULL;