Controllo delle versioni dei driver di stampa
Importante
La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi per stampanti.
Per altre informazioni, vedere Piattaforma di stampa moderna e guida alla progettazione dell'app di supporto per la stampa.
I minidriver di stampanti basati su Pscript5 e basati su unidrv, nonché i driver monolitici della stampante (driver sviluppati completamente da un IHV), devono usare il controllo delle versioni dei driver della stampante in Microsoft Windows XP e versioni successive. Lo spooler di stampa di Windows XP e versioni successive utilizza le informazioni di controllo delle versioni per consentire di selezionare i file di driver corretti durante l'installazione di una nuova versione del sistema operativo o di un Service Pack oppure quando viene stabilita una nuova connessione point e print.
Il controllo delle versioni dei driver della stampante non è supportato in Windows 2000 o nelle versioni precedenti del sistema operativo basato su NT. In tali versioni del sistema operativo, lo spooler di stampa basa la propria decisione su se sostituire un determinato file driver esclusivamente sul timestamp del file. Un file più recente viene sempre scelto in preferenza per un file meno recente, anche se il file con la data più recente potrebbe avere il set di funzionalità precedente. Poiché è così facile modificare la data di un file, questo può impedire allo spooler di effettuare la scelta corretta nei file scelti.
Per assicurarsi che siano installate le versioni corrette dei file driver, è sufficiente aggiungere numeri di versione a tali file. È possibile eseguire questa operazione apportando modifiche minime a pdrvver.h (fornito con Windows Driver Kit) e includendo tale file nel file di risorse DLL del driver della stampante. La configurazione di un driver monolitico, tramite l'installazione basata su INF, trae vantaggio anche dal controllo delle versioni dei driver, perché una DLL più recente non viene sovrascritta da una DLL precedente, anche se la DLL precedente potrebbe avere un timestamp più recente.
L'intestazione pdrvver.h è costituita quasi esclusivamente da direttive #define del preprocessore. I primi due, VER_FILETYPE e VER_FILESUBTYPE, che non devono essere modificati, indicano che il file è un file di risorse per un driver, in particolare un driver della stampante. Le costanti VFT_DRV e VFT2_DRV_VERSIONED_PRINTER, visualizzate con VER_FILETYPE e VER_FILESUBTYPE, sono descritte nella struttura VS_FIXEDFILEINFO. Quelli che è necessario modificare sono gli ultimi quattro, che sono i seguenti:
VER_FILEVERSION
Questa costante deve essere impostata su una sequenza di quattro valori WORD delimitati da virgole. Il terzo e il quarto WORD vengono usati rispettivamente per impostare i word alti e bassi del membro dwFileVersionLS della struttura VS_FIXEDFILEINFO.
Il significato di ognuno dei quattro WORD è descritto di seguito.
Prima PAROLA
Riservato. Questo valore deve essere impostato su 0.
Seconda PAROLA
Rappresenta la versione principale del driver. Per i driver in modalità utente, impostare questa opzione su 0x0003. Per i driver in modalità kernel, impostare questa opzione su 0x0002.
Terza PAROLA
Rappresenta il numero del set di funzionalità con un byte elevato e basso.
Byte elevato
Rappresenta una versione principale del set di funzionalità. Si presuppone che una versione più recente abbia un superset delle funzionalità della versione precedente. Incrementare questo valore con ogni nuova versione principale.
Per i minidriver basati su Unidrv e Pscript5 in esecuzione in Windows XP e versioni successive, inclusi gli aggiornamenti di Windows e i Service Pack, questa opzione deve essere impostata su 0x05.
Byte basso
Rappresenta una versione secondaria del set di funzionalità: una nuova versione dalla stessa codebase o architettura. Incrementare questo valore con ogni nuova versione secondaria.
Per i minidriver basati su Unidrv e Pscript5 in esecuzione nelle versioni del sistema operativo seguenti, questo byte deve essere impostato come illustrato:
Windows XP: impostare su 0x01.
Primo Service Pack di Windows XP: impostato su 0x01. Il numero di correzione di bug specifico viene visualizzato nella quarta PAROLA.
Primo Windows Update: impostato su 0x02.
Quarta PAROLA
Rappresenta una correzione di bug o una versione del Service Pack. Incrementare questo valore al rilascio di un nuovo file binario, quando si tratta di una raccolta di correzioni di bug o di un Service Pack.
Ecco un esempio di driver monolitico:
#define VER_FILEVERSION 0, 3, 0X0100, 0X0002
In ordine, da sinistra a destra, il primo valore di WORD è zero, che deve essere. Il valore del secondo WORD è tre, a indicare che si tratta di un driver in modalità utente. Nella terza PAROLA, il valore di byte elevato (0X01) indica che si tratta della prima versione principale e il byte basso dello stesso WORD (0x00) indica che finora non sono presenti versioni secondarie. Il quarto word (0x0002) indica che si tratta della seconda correzione di bug o della versione del Service Pack. Non viene fatta alcuna distinzione tra questi tipi di versioni.
Ecco alcuni esempi di minidriver basati su Unidrv-/Pscript5:
#define VER_FILEVERSION 0, 3, 0X0501, 0X0001
In ordine, da sinistra a destra, il primo valore di WORD è zero, come in precedenza. Il valore del secondo WORD è tre, a indicare che si tratta di un driver in modalità utente. Nella terza PAROLA, i valori di byte e byte alti (rispettivamente 0X05 e 0x01) indicano che si tratta di una versione per Windows XP. Il quarto word (0x0001) indica che si tratta della prima correzione di bug o della versione del Service Pack.
#define VER_FILEVERSION 0, 3, 0X0502, 0X0000
Come in precedenza, il primo WORD è zero e il secondo WORD indica che si tratta di un minidriver in modalità utente. Il terzo word (0x0502) indica che si tratta della prima versione di Windows Update rilasciata dopo Windows XP. Il quarto word (0x0000) indica che non si tratta né di una correzione di bug né di una versione del Service Pack.
VER_FILEDESCRIPTION_STR
Questa costante deve essere impostata su un nome che identifica il driver, come nell'esempio seguente.
#define VER_FILEDESCRIPTION_STR "Sample Printer Driver Resource DLL"
VER_INTERNALNAME_STR
Impostare questa costante su un nome che specifica il nome interno del file (non incluso il percorso), come nell'esempio seguente.
#define VER_INTERNALNAME_STR "SAMPLERES.DLL"
VER_ORIGINALFILENAME_STR
Impostare questa costante su un nome che specifica il nome originale del file (non incluso il percorso), come nell'esempio seguente.
#define VER_ORIGINALFILENAME_STR "SAMPLERES.DLL"