Partager via


Contrôle de version des pilotes d’imprimante

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

Les mini-pilotes d’imprimante basés sur Unidrv et Pscript5, ainsi que les pilotes d’imprimante monolithiques (pilotes développés entièrement par un IHV), doivent utiliser le contrôle de version des pilotes d’imprimante sur Microsoft Windows XP et les versions ultérieures. Le spouleur d’impression de Windows XP et des versions ultérieures utilise les informations de contrôle de version pour lui permettre de sélectionner les fichiers de pilote corrects lors de l’installation d’une nouvelle version du système d’exploitation ou d’un service pack, ou lors de l’établissement d’une nouvelle connexion Point and Print.

Le contrôle de version des pilotes d’imprimante n’est pas pris en charge sur Windows 2000 ou les versions antérieures basées sur NT. Dans ces versions de système d’exploitation, le spouleur d’impression se base sur le timestamp du fichier pour décider de remplacer ou non un fichier de pilote particulier. Un fichier plus récent est toujours choisi de préférence à un fichier plus ancien, même si le fichier avec la date la plus récente peut avoir l’ensemble de fonctionnalités plus ancien. Étant donné qu’il est facile de modifier la date d’un fichier, cela peut empêcher le spouleur de faire le bon choix dans les fichiers qu’il sélectionne.

Pour vous assurer que les versions correctes de vos fichiers de pilote sont installées, ajoutez simplement des numéros de version à ces fichiers. Vous pouvez le faire en apportant de légères modifications à pdrvver.h (fourni avec le Windows Driver Kit) et en incluant ce fichier dans le fichier ressource de votre DLL de pilote d’imprimante. La configuration d’un pilote monolithique, utilisant une installation basée sur INF, bénéficie également du contrôle de version des pilotes, car une DLL plus récente n’est pas remplacée par une DLL plus ancienne, même si la DLL plus ancienne peut avoir un timestamp plus récent.

L’en-tête pdrvver.h se compose presque exclusivement de directives de préprocesseur #define. Les deux premières, VER_FILETYPE et VER_FILESUBTYPE, qui ne doivent pas être modifiées, indiquent que le fichier est un fichier ressource pour un pilote, spécifiquement un pilote d’imprimante. Les constantes VFT_DRV et VFT2_DRV_VERSIONED_PRINTER, qui apparaissent avec VER_FILETYPE et VER_FILESUBTYPE, sont décrites dans la structure VS_FIXEDFILEINFO. Celles que vous devez modifier sont les quatre dernières, qui sont les suivantes :

VER_FILEVERSION

Cette constante doit être définie sur une séquence de quatre valeurs WORD séparées par des virgules. Les troisième et quatrième WORD sont utilisés pour définir respectivement les WORD haut et bas du membre dwFileVersionLS de la structure VS_FIXEDFILEINFO.

La signification de chacun des quatre WORD est décrite ci-dessous.

Premier WORD

Réservé. Cette valeur doit être définie à 0.

Deuxième WORD

Représente la version majeure du pilote. Pour les pilotes en mode utilisateur, définissez cette valeur sur 0x0003. Pour les pilotes en mode noyau, définissez cette valeur sur 0x0002.

Troisième WORD

Représente le numéro de l’ensemble de fonctionnalités avec un octet haut et un octet bas.

Octet haut

Représente une version majeure de l’ensemble de fonctionnalités. On suppose qu’une version plus récente contient un sur-ensemble des fonctionnalités de la version précédente. Incrémentez cette valeur à chaque nouvelle version majeure.

Pour les mini-pilotes basés sur Unidrv et Pscript5 fonctionnant sur Windows XP et versions ultérieures, y compris les mises à jour et les service packs de Windows, cette valeur doit être définie sur 0x05.

Octet bas

Représente une version mineure de l’ensemble de fonctionnalités - une nouvelle version issue de la même base de code ou architecture. Incrémentez cette valeur à chaque nouvelle version mineure.

Pour les mini-pilotes basés sur Unidrv et Pscript5 fonctionnant sur les versions suivantes du système d’exploitation, cet octet doit être défini comme suit :

  • Windows XP : définissez sur 0x01.

  • Premier service pack de Windows XP : définissez sur 0x01. (Le numéro spécifique de correctif apparaît dans le quatrième WORD.)

  • Première mise à jour de Windows : définissez sur 0x02.

Quatrième WORD

Représente une version de correctif ou de service pack. Incrémentez cette valeur lors de la publication d’un nouveau binaire, lorsqu’il s’agit d’une collection de correctifs ou d’un service pack.

Voici un exemple de pilote monolithique :

#define VER_FILEVERSION    0, 3, 0X0100, 0X0002

Dans l’ordre, de gauche à droite, la première valeur WORD est zéro, comme il se doit. La valeur du deuxième WORD est trois, indiquant qu’il s’agit d’un pilote en mode utilisateur. Dans le troisième WORD, la valeur de l’octet haut (0X01) indique qu’il s’agit de la première version majeure, et l’octet bas du même WORD (0x00) indique qu’il n’y a pour l’instant aucune version mineure. Le quatrième WORD (0x0002) indique qu’il s’agit de la deuxième version de correctif ou de service pack. (Aucune distinction n’est faite entre ces types de versions).

Voici quelques exemples de mini-pilotes basés sur Unidrv/Pscript5 :

#define VER_FILEVERSION    0, 3, 0X0501, 0X0001

Dans l’ordre, de gauche à droite, la première valeur WORD est zéro, comme précédemment. La valeur du deuxième WORD est trois, indiquant qu’il s’agit d’un pilote en mode utilisateur. Dans le troisième WORD, les valeurs des octets haut et bas (0X05 et 0x01, respectivement) indiquent qu’il s’agit d’une version pour Windows XP. Le quatrième WORD (0x0001) indique qu’il s’agit de la première version de correctif ou de service pack.

#define VER_FILEVERSION    0, 3, 0X0502, 0X0000

Comme précédemment, le premier WORD est zéro, et le deuxième WORD indique qu’il s’agit d’un mini-pilote en mode utilisateur. Le troisième WORD (0x0502) indique qu’il s’agit de la première version de mise à jour de Windows publiée après Windows XP. Le quatrième WORD (0x0000) indique qu’il ne s’agit ni d’un correctif ni d’une version de service pack.

VER_FILEDESCRIPTION_STR

Cette constante doit être définie sur un nom qui identifie le pilote, comme dans l’exemple suivant.

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR

Définissez cette constante sur un nom qui spécifie le nom interne du fichier (sans inclure le chemin), comme dans l’exemple suivant.

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALFILENAME_STR

Définissez cette constante sur un nom qui spécifie le nom original du fichier (sans inclure le chemin), comme dans l’exemple suivant.

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"