Delen via


WDI TLV generator/parser bijzondere leden

Optionele leden

Voor elke TLV met optionele kind-TLV-leden heeft de bovenliggende TLV één veld genaamd Optioneel. In dat veld is er één Booleaanse waarde voor elk optioneel onderliggend item met de naam <child_name>_IsPresent, dat is ingesteld op TRUE door de parser als het onderliggende element aanwezig is en anders FALSE. Op dezelfde manier verwachten de generatie-API's dat het veld WAAR is als het aanwezig moet zijn in de TLV-bytestroom en anders ONWAAR.

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

Array-elementen

Wanneer meerdere onderliggende elementen van hetzelfde type binnen hetzelfde bovenliggende element voorkomen (bijvoorbeeld <container />'s isCollectie attribuut), gebruiken de parser en de generator een speciale structuur om de array weer te geven: ArrayOfElements. Voor C++-clients is dit een sterk getypeerde sjabloonstructuur met opschoning op vernietigingssemantiek. Voor C-clients worden expliciet benoemde structuren gemaakt (bijvoorbeeld ArrayOfElementsOfUINT8). Deze structuren worden echter niet automatisch opgeschoond omdat C geen ondersteuning biedt voor destructors, dus gebruikers van de C API's moeten voorzichtig zijn met het niet introduceren van geheugenlekken (of dubbele vrije waarden).

Er zijn twee belangrijke velden in ArrayOfElements: ElementCount en pElements. ElementCount is het aantal elementen in de matrix. pElements is een C-stijlmatrix van de elementen. De elementen kunnen worden doorlopen zoals getoond in dit voorbeeld.

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

Het derde veld, MemoryInternallyAllocated, wordt intern gebruikt door de parser/generator. Het mag niet worden gewijzigd door de IHV.