Compartir a través de


Control de versiones de TLV de WDI

Para mantener la compatibilidad con versiones anteriores, WDI y la minipuerto usan la secuencia TLV como límite de control de versiones. El productor de la secuencia de bytes TLV siempre debe generar un TLV compatible con versiones anteriores y no incluir ningún campo recién agregado. Esto se logra mediante la adición de peerVersion al parámetro Context . El autor de la llamada debe inicializar este campo a WdiVersion recibido durante la inicialización.

Esta es la definición de tipo del parámetro Context , que se pasa a cada Parse y Generate API.

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

AllocationContext no se modifica mediante las API Parse y Generate y continúa pasando a través de la devolución de llamada del operador new proporcionado por miniport. Para obtener más información, vea WDI TLV generator/parser memory interface(Interfaz de memoria del generador/analizador de WDI).

Si un controlador binario único basado en WDI se ejecuta en una versión anterior de WDI, el generador de la miniporte usa PeerVersion para generar la secuencia de bytes anterior. Por el contrario, el analizador consume la secuencia de bytes anterior basada en PeerVersion y la convierte en las nuevas estructuras de datos.

Si un controlador de minipuerto no usa la biblioteca del generador de analizadores de TLV y, en su lugar, escribe su propio analizador y generador de TLV, y el deseo es tener un único binario que ejecute solo versiones anteriores del sistema operativo (y, por tanto, versiones anteriores de WDI), también deben incluir esta funcionalidad. Su analizador debe aceptar la gramática TLV producida por WDI anterior, y su generador solo debe generar TLV según la gramática anterior.

El XML se ha aumentado para admitir este control de versiones con dos atributos permitidos en containerRefs: versionAdded y versionRemoved. Esto es lo que impulsa el analizador y el generador para ajustar la secuencia de bytes según la versión del mismo nivel.

Nota El analizador y el generador asumen que siempre están vinculados con WDI_VERSION_LATEST. La minipuerta siempre debe pasar WDI_VERSION_LATEST para NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS::WdiVersion al llamar a NdisMRegisterWdiMiniportDriver en lugar de usar una versión específica, como WDI_VERSION_1_0, ya que quedarán obsoletas y causarán problemas con el generador del analizador TLV porque el otro extremo podría enviar una secuencia de bytes inesperada.