Compartir a través de


Miembros especiales del generador/analizador de WDI TLV

Miembros opcionales

Para cualquier TLV que tenga miembros TLV secundarios opcionales, el elemento primario tiene un campo denominado Opcional. Dentro de ese campo, hay un campo booleano para cada elemento secundario opcional denominado <child_name>_IsPresent, que el analizador establece en TRUE si el elemento secundario está presente y FALSE en caso contrario. De forma similar, las API de generación esperan que el campo sea TRUE si debe estar presente en la secuencia de bytes de TLV y FALSE en caso contrario.

WDI_SET_FIRMWARE_CONFIGURATION_PARAMETERS fwConfig = { 0 };
NDIS_STATUS status;
status = ParseWdiSetAdapterConfiguration(
    pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength - 
        sizeof(WDI_MESSAGE_HEADER),
    (PUINT8)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + 
        sizeof(WDI_MESSAGE_HEADER),
    0,
    &fwConfig);

if (status == NDIS_STATUS_SUCCESS)
{
    if (fwConfig.Optional.MacAddress_IsPresent)
    {
        // Safe to use fwConfig.MacAddress
        fwConfig.MacAddress;
    }
}

Miembros de la matriz

Cuando aparecen varios elementos secundarios del mismo tipo dentro del mismo elemento primario (por ejemplo, <el atributo isCollection del contenedor ),> el analizador y el generador usan una estructura especial para representar la matriz: ArrayOfElements. Para los clientes de C++, se trata de una estructura de plantilla fuertemente tipada con limpieza en la semántica de destrucción. En el caso de los clientes de C, se crean estructuras con nombre explícito (por ejemplo, ArrayOfElementsOfUINT8). Sin embargo, estas estructuras no se limpian automáticamente porque C no admite destructores, por lo que los usuarios de las API de C deben tener cuidado de no introducir pérdidas de memoria (o liberaciones dobles).

Hay dos campos importantes en ArrayOfElements: ElementCount y pElements. ElementCount es el recuento de elementos de la matriz. pElements es una matriz de estilo C de los elementos. Los elementos se pueden iterar como se muestra en este ejemplo.

for (UINT32 i = 0;
    i < pConnectTaskParameters->ConnectParameters.
            MulticastCipherAlgorithms.ElementCount;
    i++)
{
    // Safe to use pElements[i]
    pConnectTaskParameters->ConnectParameters.MulticastCipherAlgorithms.
        pElements[i];
}

El analizador o generador usa internamente el tercer campo MemoryInternallyAllocated. El IHV no debe modificarlo.