Información general sobre la interfaz del generador TLV de WDI
Modelo de función sobrecargada de C++
En este modelo, solo hay una llamada de función para generar una matriz de bytes de TLV a partir de la estructura de datos.
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);
El segundo parámetro puede ser muy útil. A veces, el búfer de TLV se empaqueta en una estructura de datos más grande y este parámetro permite reservar previamente el espacio al principio del búfer para ese encabezado. El valor correcto para cbHeaderLength suele sizeof(WDI_MESSAGE_HEADER)
ser .
En el caso de los mensajes que no tienen datos asociados, todavía hay sobrecargadas Generar API, pero el primer parámetro es opcional y simplemente se puede pasar como (EmptyMessageStructureType*)NULL
.
Cuando haya terminado con los datos de TLV contenidos en pOutput, debe volver a llamar a la biblioteca para liberar el búfer.
FreeGenerated(pOutput);
pOutput = NULL;
Modelo de función de estilo C
En este modelo, hay una rutina Generate específica para cada mensaje o estructura de nivel superior porque C no admite funciones sobrecargadas. De lo contrario, se comporta igual que el modelo de C++.
ndisStatus = GenerateWdiGetAdapterCapabilities(
&adapterCapabilities,
(ULONG)sizeof(WFC_COMMAND_HEADER),
&Context,
&length,
&pOutput);
Cuando haya terminado con la matriz de bytes TLV, vuelva a llamar para liberar la memoria de la misma manera que el modelo de C++.
FreeGenerated(pOutput);
pOutput = NULL;