Compartilhar via


Controle de versão do WDI TLV

Para manter a compatibilidade com versões anteriores, o WDI e o miniporto usam o fluxo TLV como um limite de controle de versão. O produtor do fluxo de bytes TLV sempre deve gerar um TLV compatível com versões anteriores e não incluir nenhum campo recém-adicionado. Isso é feito adicionando um PeerVersion ao parâmetro Context . Esse campo deve ser inicializado pelo chamador para o WdiVersion recebido durante a inicialização.

Aqui está a definição de tipo do parâmetro Context , que é passado para cada API analisar e gerar.

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

AllocationContext não é modificado pelas APIs de Análise e Geração e continua a ser passado para o retorno de chamada do operador new fornecido pelo miniporto. Para obter mais informações, consulte Interface de memória do gerador/analisador do WDI TLV.

Se um driver binário único baseado em WDI for executado em uma versão mais antiga do WDI, o gerador no miniporto usará o PeerVersion para gerar o fluxo de bytes mais antigo. Por outro lado, o analisador consome o fluxo de bytes mais antigo com base no PeerVersion e o converte nas novas estruturas de dados.

Se um driver de miniporta não usar a biblioteca geradora de analisador TLV e, em vez disso, gravar seu próprio analisador e gerador TLV, e o desejo for ter um único binário executando apenas versões mais antigas do sistema operacional (e, portanto, versões antigas do WDI), eles também deverão incluir essa funcionalidade. Seu analisador deve aceitar a gramática TLV produzida pelo WDI mais antigo e seu gerador só deve gerar TLVs de acordo com a gramática mais antiga.

O XML foi aumentado para dar suporte a esse controle de versão com dois atributos permitidos em containerRefs: versionAdded e versionRemoved. Isso é o que orienta o analisador e o gerador a ajustar o fluxo de bytes de acordo com a versão do par.

Nota O analisador e o gerador pressupõem que eles estejam sempre vinculados a WDI_VERSION_LATEST. O miniporto sempre deve passar WDI_VERSION_LATEST para NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS::WdiVersion ao chamar NdisMRegisterWdiMiniportDriver em vez de usar uma versão específica, como WDI_VERSION_1_0, pois eles ficarão desatualizados e causarão problemas com o gerador do analisador TLV porque a outra extremidade pode enviar um fluxo de bytes inesperado.