Contrôle de version WDI TLV
Pour maintenir la compatibilité descendante, WDI et le miniport utilisent le flux TLV comme limite de contrôle de version. Le producteur du flux d’octets TLV doit toujours générer un TLV à compatibilité descendante et ne pas inclure de champs nouvellement ajoutés. Pour ce faire, ajoutez un PeerVersion au paramètre Context . Ce champ doit être initialisé par l’appelant de la WdiVersion reçue pendant l’initialisation.
Voici la définition de type du paramètre Context , qui est passé dans chaque API Analyse et Générer.
typedef struct _TLV_CONTEXT
{
ULONG_PTR AllocationContext;
ULONG PeerVersion;
} TLV_CONTEXT, *PTLV_CONTEXT;
typedef const TLV_CONTEXT * PCTLV_CONTEXT;
AllocationContext n’est pas modifié par les API Analyser et Générer et continue d’être transmis au rappel d’opérateur new
fourni par miniport. Pour plus d’informations, consultez Interface mémoire du générateur/analyseur WDI TLV.
Si un pilote mono binary basé sur WDI s’exécute sur une version antérieure de WDI, le générateur dans le miniport utilise PeerVersion pour générer l’ancien flux d’octets. À l’inverse, l’analyseur consomme l’ancien flux d’octets basé sur PeerVersion et le convertit en nouvelles structures de données.
Si un pilote miniport n’utilise pas la bibliothèque de générateur de l’analyseur TLV et écrit à la place son propre analyseur et générateur TLV, et que le désir est d’avoir un seul fichier binaire exécutant uniquement les anciennes versions du système d’exploitation (et donc les anciennes versions de WDI), il doit également inclure cette fonctionnalité. Son analyseur doit accepter la grammaire TLV produite par l’ancien WDI, et son générateur ne doit générer que des TLV en fonction de l’ancienne grammaire.
Le code XML a été augmenté pour prendre en charge ce contrôle de version avec deux attributs autorisés sur containerRefs : versionAdded et versionRemoved. C’est ce qui conduit l’analyseur et le générateur à ajuster le flux d’octets en fonction de la version de l’homologue.
Note L’analyseur et le générateur supposent qu’ils sont toujours liés à WDI_VERSION_LATEST. Le miniport doit toujours passer WDI_VERSION_LATEST pour NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS::WdiVersion lors de l’appel de NdisMRegisterWdiMiniportDriver plutôt que d’utiliser une version spécifique, comme WDI_VERSION_1_0, car ils seront obsolètes et causeront des problèmes avec le générateur d’analyseur TLV, car l’autre extrémité peut envoyer un flux d’octets inattendu.