이전 버전과의 호환성을 유지하기 위해 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만 생성해야 합니다.
containerRefs에서 허용되는 두 가지 특성인 versionAdded 및 versionRemoved를 사용하여 이 버전 관리 기능을 지원하도록 XML이 보강되었습니다. 이것이 파서와 생성기를 구동하여 피어 버전에 따라 바이트 스트림을 조정하는 것입니다.
메모 파서와 생성기는 항상 WDI_VERSION_LATEST 연결되어 있다고 가정합니다. 미니포트는 특정 버전인 WDI_VERSION_1_0을 사용하는 대신, NdisMRegisterWdiMiniportDriver를 호출할 때 항상 NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS::WdiVersion에 대해 WDI_VERSION_LATEST를 전달해야 합니다. 다른 쪽 끝에서 예기치 않은 바이트 스트림을 보낼 수 있기 때문에 TLV 파서 생성기에 문제가 발생할 수 있습니다.