Vue d’ensemble de l’interface du générateur WDI TLV
Modèle de fonction surchargé C++
Dans ce modèle, il n’existe qu’un seul appel de fonction pour générer un tableau d’octets TLV à partir de votre structure de données.
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);
Le deuxième paramètre peut être très utile. Parfois, la mémoire tampon TLV est empaquetée dans une structure de données plus grande, et ce paramètre vous permet de pré-réserver de l’espace au début de la mémoire tampon pour cet en-tête. La valeur correcte pour cbHeaderLength est souvent sizeof(WDI_MESSAGE_HEADER)
.
Pour les messages qui n’ont pas de données associées, il existe toujours des API Générer surchargées, mais le premier paramètre est facultatif et peut simplement être passé en tant que (EmptyMessageStructureType*)NULL
.
Lorsque vous avez terminé avec les données TLV contenues dans pOutput, vous devez rappeler dans la bibliothèque pour libérer la mémoire tampon.
FreeGenerated(pOutput);
pOutput = NULL;
Modèle de fonction de style C
Dans ce modèle, il existe une routine De génération spécifique pour chaque message ou structure de niveau supérieur, car C ne prend pas en charge les fonctions surchargées. Sinon, il se comporte de la même façon que le modèle C++.
ndisStatus = GenerateWdiGetAdapterCapabilities(
&adapterCapabilities,
(ULONG)sizeof(WFC_COMMAND_HEADER),
&Context,
&length,
&pOutput);
Lorsque vous avez terminé avec le tableau d’octets TLV, rappelez pour libérer la mémoire de la même façon que le modèle C++.
FreeGenerated(pOutput);
pOutput = NULL;