Freigeben über


Übersicht über die WDI TLV-Generatorschnittstelle

C++-überladenes Funktionsmodell

In diesem Modell gibt es nur einen Funktionsaufruf, um ein TLV-Bytearray aus Ihrer Datenstruktur zu generieren.

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);

Der zweite Parameter kann sehr hilfreich sein. Manchmal ist der TLV-Puffer in eine größere Datenstruktur verpackt, und dieser Parameter ermöglicht es Ihnen, Platz am Anfang des Puffers für diesen Header vorab zu reservieren. Der richtige Wert für cbHeaderLength ist häufig sizeof(WDI_MESSAGE_HEADER).

Für Nachrichten ohne zugeordnete Daten gibt es weiterhin überladene Generieren-APIs, aber der erste Parameter ist optional und kann einfach als (EmptyMessageStructureType*)NULLübergeben werden.

Wenn Sie mit den in pOutputenthaltenen TLV-Daten fertig sind, müssen Sie die Bibliothek wieder aufrufen, um den Puffer freizugeben.

    FreeGenerated(pOutput);
    pOutput = NULL;

Funktionsmodell im C-Stil

In diesem Modell gibt es eine spezifische Generate-Routine für jede Nachricht oder Struktur der obersten Ebene, da C keine überladenen Funktionen unterstützt. Andernfalls verhält es sich genauso wie das C++-Modell.

ndisStatus = GenerateWdiGetAdapterCapabilities(
    &adapterCapabilities,
    (ULONG)sizeof(WFC_COMMAND_HEADER),
    &Context,
    &length,
    &pOutput);

Wenn Sie mit dem TLV-Bytearray fertig sind, rufen Sie zurück, um den Speicher auf die gleiche Weise wie das C++-Modell freizugeben.

    FreeGenerated(pOutput);
    pOutput = NULL;