Partager via


Contrôle de version du pilote d’impression

Important

Nous vous recommandons d’utiliser le pilote de classe de boîte de réception IPP 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 d’appareils d’imprimante.

Pour plus d’informations, consultez le guide de conception d’application de prise en charge de l’impression.

Les mini-disques d’imprimante unidrv et Pscript5, ainsi que les pilotes d’imprimante monolithiques (pilotes entièrement développés par un IHV), doivent utiliser le contrôle de version des pilotes d’imprimante sur Microsoft Windows XP et versions ultérieures. Le spouleur d’impression Windows XP et ultérieur utilise les informations de contrôle de version pour lui permettre de sélectionner les fichiers de pilotes appropriés lors de l’installation d’une nouvelle version du système d’exploitation ou d’un Service Pack, ou lorsqu’une nouvelle connexion Point et Imprimer est établie.

La gestion des versions des pilotes d’imprimante n’est pas prise en charge sur Windows 2000 ou les versions précédentes du système d’exploitation NT. Dans ces versions du système d’exploitation, le spouleur d’impression base sa décision sur le remplacement ou non d’un fichier de pilote particulier uniquement sur l’horodatage du fichier. Un fichier plus récent est toujours choisi de préférence pour un fichier plus ancien, même si le fichier avec la date la plus récente peut avoir l’ancien ensemble de fonctionnalités. Étant donné qu’il est si facile de modifier la date d’un fichier, cela peut empêcher le spouleur de faire le bon choix dans les fichiers qu’il choisit.

Pour vous assurer que les versions correctes de vos fichiers de pilotes sont installées, il vous suffit d’ajouter des numéros de version à ces fichiers. Pour ce faire, vous pouvez apporter des modifications mineures à pdrvver.h (fourni avec le Kit de pilotes Windows) et inclure ce fichier dans votre fichier de ressources DLL du pilote d’imprimante. La configuration d’un pilote monolithique, à l’aide d’une installation basée sur INF, tire également parti 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 l’ancienne DLL peut avoir un horodatage 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 de ressources pour un pilote, en particulier un pilote d’imprimante. Les constantes VFT_DRV et VFT2_DRV_VERSIONED_PRINTER, qui s’affichent avec VER_FILETYPE et VER_FILESUBTYPE, sont décrites dans la structure VS_FIXEDFILEINFO . Ceux que vous devez modifier sont les quatre derniers, qui sont les suivants :

VER_FILEVERSION

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

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

Premier mot

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

Deuxième MOT

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

Troisième mot

Représente le numéro d’ensemble de fonctionnalités avec un octet élevé et un octet faible.

Octet élevé

Représente une version majeure de l’ensemble de fonctionnalités. Une version plus récente est supposée avoir un sur-ensemble des fonctionnalités de la version précédente. Incrémentez cette valeur avec chaque nouvelle version majeure.

Pour les minidrivers unidrv et Pscript5 s’exécutant sur Windows XP et versions ultérieures, y compris Windows Mises à jour et Service Packs, cette valeur doit être définie sur 0x05.

Octet faible

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

Pour les mini-disques unidrv et Pscript5 qui s’exécutent sur les versions de système d’exploitation suivantes, cet octet doit être défini comme indiqué :

  • Windows XP : défini sur 0x01.

  • Premier Service Pack Windows XP : défini sur 0x01. (Le numéro de correctif de bogue particulier apparaît dans le quatrième MOT.)

  • Première Windows Update : définissez sur 0x02.

Quatrième mot

Représente un correctif de bogue ou une version du Service Pack. Incrémentez cette valeur lors de la publication d’un nouveau fichier binaire, lorsqu’il s’agit d’une collection de correctifs de bogues 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, ce qui doit être. La valeur du deuxième WORD est trois, ce qui indique qu’il s’agit d’un pilote en mode utilisateur. Dans le troisième MOT, la valeur de l’octet élevé (0X01) indique qu’il s’agit de la première version majeure, et l’octet faible du même MOT (0x00) indique qu’il n’existe, jusqu’à présent, aucune version mineure. Le quatrième mot (0x0002) indique qu’il s’agit de la deuxième version de correctif de bogue ou service pack. (Aucune distinction n’est faite entre ces types de versions.)

Voici quelques exemples de minidriver 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, ce qui indique qu’il s’agit d’un pilote en mode utilisateur. Dans le troisième WORD, les valeurs d’octets élevés et d’octets faibles (0X05 et 0x01, respectivement) indiquent qu’il s’agit d’une version pour Windows XP. Le quatrième mot (0x0001) indique qu’il s’agit du premier correctif de bogue ou de la première version du Service Pack.

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

Comme précédemment, le premier WORD est égal à zéro, et le deuxième mot indique qu’il s’agit d’un mini-disque en mode utilisateur. Le troisième mot (0x0502) indique qu’il s’agit de la première version Windows Update publiée après Windows XP. Le quatrième mot (0x0000) indique qu’il ne s’agit ni d’un correctif de bogue ni d’une version du 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 le chemin d’accès), 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 d’origine du fichier (sans le chemin d’accès), comme dans l’exemple suivant.

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"