Delen via


Versiebeheer van printstuurprogramma's

Belangrijk

Het moderne afdrukplatform is de voorkeursmiddel van Windows om te communiceren met printers. We raden aan om de IPP inbox class driver van Microsoft te gebruiken, samen met Print Support Apps (PSA), om de afdrukervaring in Windows 10 en 11 aan te passen voor de ontwikkeling van printerapparaten.

Zie de ontwerphandleiding voor Print Support App v1 en v2 voor meer informatie.

Op unidrv gebaseerde en Pscript5-printer minidrivers, evenals monolithische printerstuurprogramma's (stuurprogramma's die volledig zijn ontwikkeld door een IHV), moeten versiebeheer van printerstuurprogramma's in Microsoft Windows XP en hoger gebruiken. De Windows XP en latere afdrukspooler gebruikt de versiebeheergegevens om het mogelijk te maken de juiste stuurprogrammabestanden te selecteren tijdens de installatie van een nieuwe besturingssysteemversie of servicepack, of wanneer er een nieuwe punt- en afdrukverbinding tot stand is gebracht.

Versiebeheer van printerstuurprogramma's wordt niet ondersteund in windows 2000 of eerdere NT-besturingssysteemversies. In deze versies van het besturingssysteem baseert de afdrukspooler zijn beslissing over het vervangen van een bepaald stuurprogrammabestand uitsluitend op de tijdstempel van het bestand. Een nieuwer bestand wordt altijd gekozen in voorkeur voor een ouder bestand, ook al kan het bestand met de nieuwere datum de oude functieset hebben. Omdat het zo eenvoudig is om de datum van een bestand te wijzigen, kan dit voorkomen dat de spooler de juiste keuze maakt in de bestanden die het kiest.

Als u ervoor wilt zorgen dat de juiste versies van uw stuurprogrammabestanden zijn geïnstalleerd, voegt u gewoon versienummers toe aan deze bestanden. U kunt dit doen door kleine wijzigingen aan te brengen in pdrvver.h (die wordt geleverd met de Windows Driver Kit) en dat bestand op te slaan in het DLL-bronbestand van het printerstuurprogramma. Het instellen van een monolithisch stuurprogramma, met behulp van installatie op basis van INF, profiteert ook van versiebeheer van stuurprogramma's, omdat een nieuwere DLL niet wordt overschreven door een oudere DLL, ook al heeft de oudere DLL mogelijk een recentere tijdstempel.

De header pdrvver.h bestaat bijna uitsluitend uit preprocessor #define instructies. De eerste twee, VER_FILETYPE en VER_FILESUBTYPE, die niet mogen worden gewijzigd, geven aan dat het bestand een bronbestand is voor een stuurprogramma, met name een printerstuurprogramma. De constanten VFT_DRV en VFT2_DRV_VERSIONED_PRINTER, die worden weergegeven met VER_FILETYPE en VER_FILESUBTYPE, worden beschreven in de VS_FIXEDFILEINFO structuur. De laatste vier die u moet wijzigen, zijn de volgende vier:

VER_FILEVERSION

Deze constante moet worden ingesteld op een reeks van vier door komma's gescheiden WORD-waarden. De derde en vierde WORD's worden gebruikt om respectievelijk de hoge en lage WORD's van het dwFileVersionLS-lid van de VS_FIXEDFILEINFO structuur in te stellen.

De betekenis van elk van de vier WORD's wordt hieronder beschreven.

Eerste WOORD

Gereserveerd. Deze waarde moet worden ingesteld op 0.

Tweede Woord

Vertegenwoordigt de primaire versie van het stuurprogramma. Voor stuurprogramma's in de gebruikersmodus stelt u dit in op 0x0003. Voor kernelmodusstuurprogramma's stelt u dit in op 0x0002.

Derde woord

Vertegenwoordigt het ingestelde aantal functies met een hoge en lage byte.

High byte

Vertegenwoordigt een belangrijke release van een functieset. Bij een nieuwere release wordt ervan uitgegaan dat deze een superset heeft van de functionaliteit van de vorige release. Verhoog deze waarde met elke nieuwe primaire release.

Voor op Unidrv- en Pscript5 gebaseerde minidrivers die worden uitgevoerd op Windows XP en hoger, inclusief Windows Updates en Service Packs, moet dit worden ingesteld op 0x05.

Lage byte

Vertegenwoordigt een kleinere kenmerkensetrelease - een nieuwe release op basis van dezelfde codebasis of architectuur. Verhoog deze waarde met elke nieuwe kleine release.

Voor unidrv- en Pscript5-gebaseerde minidrivers die worden uitgevoerd op de volgende versies van het besturingssysteem, moet deze byte worden ingesteld zoals wordt weergegeven:

  • Windows XP: ingesteld op 0x01.

  • Eerste Windows XP-servicepack: ingesteld op 0x01. (Het specifieke foutoplossingsnummer wordt weergegeven in het vierde WORD.)

  • Eerste Windows Update: ingesteld op 0x02.

Vierde WOORD

Vertegenwoordigt een foutoplossing of een release van een servicepack. Verhoog deze waarde bij het vrijgeven van een nieuw binair bestand wanneer het een verzameling bugfixes of een servicepack is.

Hier volgt een monolithisch stuurprogrammavoorbeeld:

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

In volgorde, van links naar rechts, is de eerste WORD-waarde nul, die moet zijn. De waarde van de tweede WORD is drie, waarmee wordt aangegeven dat dit een stuurprogramma voor de gebruikersmodus is. In het derde WOORD geeft de hoge bytewaarde (0X01) aan dat dit de eerste primaire release is en dat de lage byte van hetzelfde WORD (0x00) aangeeft dat er tot nu toe geen secundaire releases zijn. De vierde WORD (0x0002) geeft aan dat dit de tweede foutoplossing of servicepackrelease is. (Er wordt geen onderscheid gemaakt tussen deze typen releases.)

Hier volgen enkele op Unidrv-/Pscript5 gebaseerde minidriver-voorbeelden:

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

In volgorde, van links naar rechts, is de eerste WORD-waarde nul, net als voorheen. De waarde van de tweede WORD is drie, waarmee wordt aangegeven dat dit een stuurprogramma voor de gebruikersmodus is. In het derde woord geven de hoogbyte- en laagbytewaarden (respectievelijk 0X05 en 0x01) aan dat dit een release is voor Windows XP. De vierde WORD (0x0001) geeft aan dat dit de eerste bugfix of servicepack-release is.

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

Net als voorheen is de eerste WORD nul en de tweede WORD geeft aan dat dit een minidriver in de gebruikersmodus is. De derde WORD (0x0502) geeft aan dat dit de eerste Windows Update-versie is die is uitgebracht na Windows XP. De vierde WORD (0x0000) geeft aan dat dit geen foutoplossing of servicepackrelease is.

VER_FILEDESCRIPTION_STR

Deze constante moet worden ingesteld op een naam die het stuurprogramma identificeert, zoals in het volgende voorbeeld.

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR

Stel deze constante in op een naam die de interne naam van het bestand aangeeft (niet inclusief het pad), zoals in het volgende voorbeeld.

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALFILENAME_STR

Stel deze constante in op een naam die de oorspronkelijke naam van het bestand aangeeft (niet inclusief het pad), zoals in het volgende voorbeeld.

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"