Freigeben über


WDI-TLV-Versionsverwaltung

Um die Abwärtskompatibilität zu gewährleisten, verwenden sowohl WDI als auch der Miniport den TLV-Stream als Versionsbegrenzung. Der Producer des TLV-Bytestreams muss immer eine abwärtskompatible TLV generieren und keine neu hinzugefügten Felder einschließen. Dies wird erreicht, indem dem Context-Parameter eine PeerVersion hinzugefügt wird. Dieses Feld sollte vom Aufrufer der WdiVersion initialisiert werden, die während der Initialisierung empfangen wurde.

Hier sehen Sie die Typdefinition des Context-Parameters , der an jede Parse- und Generate-API übergeben wird.

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

AllocationContext ist von den Parse- und Generate-APIs unverändert und wird weiterhin an den vom Miniport bereitgestellten Operatorrückruf new übergeben. Weitere Informationen finden Sie unter WDI TLV-Generator/Parser-Speicherschnittstelle.

Wenn ein WDI-basierter einzelbinärer Treiber für eine ältere Version von WDI ausgeführt wird, verwendet der Generator im Miniport peerVersion , um den älteren Bytedatenstrom zu generieren. Umgekehrt nutzt der Parser den älteren Bytedatenstrom basierend auf der PeerVersion und konvertiert ihn in die neuen Datenstrukturen.

Wenn ein Miniporttreiber nicht die TLV-Parsergeneratorbibliothek verwendet und stattdessen seinen eigenen TLV-Parser und Generator schreibt, und der Wunsch besteht, dass eine einzelne Binärdatei nur ältere Betriebssystemversionen (und somit alte Versionen von WDI) ausführen soll, müssen sie diese Funktion ebenfalls enthalten. Ihr Parser muss die von älteren WDI erzeugte TLV-Grammatik akzeptieren, und ihr Generator darf nur TLVs gemäß der älteren Grammatik generieren.

Der XML-Code wurde erweitert, um diese Versionsverwaltung mit zwei für containerRefs zulässigen Attributen zu unterstützen: versionAdded und versionRemoved. Dies ist, was den Parser und den Generator antreibt, um den Bytedatenstrom entsprechend der Peerversion anzupassen.

Hinweis Der Parser und der Generator gehen davon aus, dass sie immer mit WDI_VERSION_LATEST verknüpft sind. Der Miniport sollte beim Aufrufen von NdisMRegisterWdiMiniportDriver immer WDI_VERSION_LATEST für NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS::WdiVersion übergeben, anstatt eine bestimmte Version wie WDI_VERSION_1_0 zu verwenden, da sie veraltet sind und Probleme mit dem TLV-Parsergenerator verursachen, da das andere Ende möglicherweise einen unerwarteten Bytedatenstrom sendet.