다음을 통해 공유


WDI TLV 생성기 인터페이스 개요

C++ 오버로드된 함수 모델

이 모델에는 데이터 구조에서 TLV 바이트 배열을 생성하는 함수 호출이 하나만 있습니다.

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

두 번째 매개 변수는 매우 유용할 수 있습니다. 경우에 따라 TLV 버퍼가 더 큰 데이터 구조로 압축되고 이 매개 변수를 사용하면 해당 헤더의 버퍼 시작 부분에 공간을 미리 예약할 수 있습니다. cbHeaderLength에 대한 올바른 값은 종종 sizeof(WDI_MESSAGE_HEADER)입니다.

연결된 데이터가 없는 메시지의 경우 여전히 오버로드된 생성 API가 있지만 첫 번째 매개 변수는 선택 사항이며 단순히 로 (EmptyMessageStructureType*)NULL전달될 수 있습니다.

pOutput에 포함된 TLV 데이터를 완료하면 라이브러리로 다시 호출하여 버퍼를 해제해야 합니다.

    FreeGenerated(pOutput);
    pOutput = NULL;

C 스타일 함수 모델

이 모델에는 C가 오버로드된 함수를 지원하지 않으므로 각 최상위 메시지 또는 구조에 대한 특정 생성 루틴이 있습니다. 그렇지 않으면 C++ 모델과 동일하게 동작합니다.

ndisStatus = GenerateWdiGetAdapterCapabilities(
    &adapterCapabilities,
    (ULONG)sizeof(WFC_COMMAND_HEADER),
    &Context,
    &length,
    &pOutput);

TLV 바이트 배열을 완료하면 다시 호출하여 C++ 모델과 동일한 방식으로 메모리를 해제합니다.

    FreeGenerated(pOutput);
    pOutput = NULL;