다음을 통해 공유


WDI TLV 버전 관리

이전 버전과의 호환성을 유지하기 위해 WDI와 미니포트는 모두 TLV 스트림을 버전 관리 경계로 사용합니다. TLV 바이트 스트림의 생산자는 항상 이전 버전과 호환되는 TLV를 생성해야 하며 새로 추가된 필드를 포함하지 않아야 합니다. 이 작업은 Context 매개 변수에 PeerVersion을 추가하여 수행됩니다. 이 필드는 초기화 중에 수신된 WdiVersion 에 대한 호출자가 초기화해야 합니다.

다음은 모든 구문 분석 및 생성 API에 전달되는 Context 매개 변수의 형식 정의입니다.

typedef struct _TLV_CONTEXT
{
    ULONG_PTR   AllocationContext;
    ULONG       PeerVersion;
} TLV_CONTEXT, *PTLV_CONTEXT;
typedef const TLV_CONTEXT * PCTLV_CONTEXT;

AllocationContext 는 구문 분석 및 생성 API에 의해 수정되지 않으며 미니포트 제공 연산자 new 콜백으로 계속 전달됩니다. 자세한 내용은 WDI TLV 생성기/파서 메모리 인터페이스를 참조하세요.

WDI 기반 단일 이진 드라이버가 이전 버전의 WDI에 대해 실행되는 경우 미니포트의 생성기는 PeerVersion 을 사용하여 이전 바이트 스트림을 생성합니다. 반대로 파서는 PeerVersion 에 따라 이전 바이트 스트림을 사용하고 이를 새 데이터 구조로 변환합니다.

미니포트 드라이버가 TLV 파서 생성기 라이브러리를 사용하지 않고 자체 TLV 파서 및 생성기를 작성하는 대신 이전 OS 버전(따라서 이전 버전의 WDI)만 실행하는 단일 이진 파일을 사용하려는 경우 이 기능도 포함해야 합니다. 파서는 이전 WDI에서 생성된 TLV 문법을 수락해야 하며, 생성기는 이전 문법에 따라 TLLV만 생성해야 합니다.

xml은 containerRefs에서 허용되는 두 가지 특성인 versionAddedversionRemoved를 사용하여 이 버전 관리를 지원하도록 보강되었습니다. 이것이 파서와 생성기를 구동하여 피어 버전에 따라 바이트 스트림을 조정하는 것입니다.

참고 파서와 생성기는 항상 WDI_VERSION_LATEST 연결되어 있다고 가정합니다. 미니포트는 WDI_VERSION_1_0 같은 특정 버전을 사용하는 대신 NdisMRegisterWdiMiniportDriver를 호출할 때 항상 NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS::WdiVersion에 대한 WDI_VERSION_LATEST 전달해야 합니다. 다른 쪽 끝은 예기치 않은 바이트 스트림을 보낼 수 있기 때문에 TLV 파서 생성기에 문제가 발생할 수 있기 때문입니다.