다음을 통해 공유


WDI TLV 생성기/파서 특수 멤버

선택적 멤버

선택적 자식 TLV 멤버가 있는 모든 TLV의 경우 부모에는 선택 사항이라는 필드가 하나 있습니다. 해당 필드 내에는 child_name>_IsPresent라는< 각 선택적 자식에 대해 하나의 부울 필드가 있으며, 자식이 있으면 파서에서 TRUE로 설정되고 그렇지 않으면 FALSE로 설정됩니다. 마찬가지로 세대 API는 TLV 바이트 스트림에 있어야 하는 경우 필드가 TRUE이고 그렇지 않으면 FALSE가 될 것으로 예상합니다.

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

배열 멤버

동일한 형식의 여러 자식이 동일한 부모(예 <: 컨테이너 />'s isCollection 특성) 내에 표시되면 파서와 생성기는 배열을 나타내는 특수 구조인 ArrayOfElements를 사용합니다. C++ 클라이언트의 경우 소멸 의미 체계를 클린 강력한 형식의 템플릿 구조입니다. C 클라이언트의 경우 명시적으로 명명된 구조체가 만들어집니다(예: ArrayOfElementsOfUINT8). 그러나 C가 소멸자를 지원하지 않으므로 이러한 구조는 자동으로 정리되지 않으므로 C API 사용자는 메모리 누수(또는 이중 해제)를 도입하지 않도록 주의해야 합니다.

ArrayOfElements 내에는 ElementCountpElements라는 두 가지 중요한 필드가 있습니다. ElementCount 는 배열 내의 요소 수입니다. pElements 는 요소의 C 스타일 배열입니다. 이 샘플에 표시된 대로 요소를 반복할 수 있습니다.

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

세 번째 필드인 MemoryInternallyAllocated는 파서/생성기에서 내부적으로 사용됩니다. IHV에서 수정해서는 안 됩니다.