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;