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;