Compartilhar via


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;