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;