Visão geral da interface do gerador TLV do WDI
Modelo de função sobrecarregada do C++
Nesse modelo, há apenas uma chamada de função para gerar uma matriz de bytes TLV da estrutura de dados.
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);
O segundo parâmetro pode ser muito útil. Às vezes, o buffer TLV é empacotado em uma estrutura de dados maior e esse parâmetro permite que você reserve espaço previamente no início do buffer para esse cabeçalho. O valor correto para cbHeaderLength geralmente sizeof(WDI_MESSAGE_HEADER)
é .
Para mensagens que não têm dados associados, ainda há APIs geradas sobrecarregadas, mas o primeiro parâmetro é opcional e pode simplesmente ser passado como (EmptyMessageStructureType*)NULL
.
Quando terminar de usar os dados TLV contidos no pOutput, você deverá chamar de volta para a biblioteca para liberar o buffer.
FreeGenerated(pOutput);
pOutput = NULL;
Modelo de função de estilo C
Nesse modelo, há uma rotina de Geração específica para cada mensagem ou estrutura de nível superior porque C não dá suporte a funções sobrecarregadas. Caso contrário, ele se comporta da mesma forma que o modelo C++.
ndisStatus = GenerateWdiGetAdapterCapabilities(
&adapterCapabilities,
(ULONG)sizeof(WFC_COMMAND_HEADER),
&Context,
&length,
&pOutput);
Quando terminar com a matriz de bytes TLV, chame de volta para liberar a memória da mesma forma que o modelo C++.
FreeGenerated(pOutput);
pOutput = NULL;