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 缓冲区打包到更大的数据结构中,此参数允许您在该标头的缓冲区开头预保留空间。 通常 sizeof(WDI_MESSAGE_HEADER)
, cbHeaderLength的值是正确的。
对于没有关联数据的消息,仍会重载生成 Api,但第一个参数是可选的,并且可能只是作为 (EmptyMessageStructureType*)NULL
传入。
完成 pOutput中包含的 TLV 数据后,必须回调到库以释放缓冲区。
FreeGenerated(pOutput);
pOutput = NULL;
C 样式函数模型
在此模型中,每个顶级消息或结构都有一个特定的生成例程,因为 C 不支持重载函数。 否则,其行为与 c + + 模型相同。
ndisStatus = GenerateWdiGetAdapterCapabilities(
&adapterCapabilities,
(ULONG)sizeof(WFC_COMMAND_HEADER),
&Context,
&length,
&pOutput);
完成 TLV 字节数组后,回调以按照与 c + + 模型相同的方式释放内存。
FreeGenerated(pOutput);
pOutput = NULL;