Freigeben über


Versionierung von Druckertreibern

Wichtig

Die moderne Druckplattform ist das bevorzugte Mittel von Windows, um mit Druckern zu kommunizieren. Wir empfehlen die Verwendung des Microsoft IPP-Treibers für die Posteingangsklasse zusammen mit Print Support Apps (PSA), um das Druckverhalten in Windows 10 und 11 für die Entwicklung von Druckergeräten anzupassen.

Weitere Informationen finden Sie im Designhandbuch zur Druckunterstützungs-App .

Unidrv-basierte und Pscript5-basierte Drucker-Minitreiber sowie monolithische Druckertreiber (vollständig von einem IHV entwickelte Treiber) sollten unter Microsoft Windows XP und höher die Versionierung von Druckertreibern verwenden. Der Druckspooler von Windows XP und höher verwendet die Versionsinformationen, um bei der Installation einer neuen Betriebssystemversion oder eines Service Packs oder beim Aufbau einer neuen Point and Print-Verbindung die richtigen Treiberdateien auswählen zu können.

Die Versionierung von Druckertreibern wird unter Windows 2000 oder früheren NT-basierten Betriebssystemversionen nicht unterstützt. In diesen Betriebssystemversionen stützt der Druckspooler seine Entscheidung, ob eine bestimmte Treiberdatei ersetzt werden soll, ausschließlich auf den Zeitstempel der Datei. Eine neuere Datei wird immer einer älteren Datei vorgezogen, auch wenn die Datei mit dem neueren Datum möglicherweise den alten Funktionsumfang hat. Da es so einfach ist, das Datum einer Datei zu ändern, kann dies dazu führen, dass der Spooler bei der Auswahl der Dateien nicht die richtige Wahl trifft.

Um sicherzustellen, dass die richtigen Versionen Ihrer Treiberdateien installiert werden, fügen Sie einfach Versionsnummern zu diesen Dateien hinzu. Sie können dies tun, indem Sie geringfügige Änderungen an der Datei pdrvver.h (die mit dem Windows Driver Kit geliefert wird) vornehmen und diese Datei in Ihre Druckertreiber-DLL-Ressourcendatei aufnehmen. Bei der Einrichtung eines monolithischen Treibers mit einer INF-basierten Installation profitieren Sie ebenfalls von der Treiberversionierung, da eine neuere DLL nicht von einer älteren DLL überschrieben wird, auch wenn die ältere DLL einen neueren Zeitstempel haben könnte.

Der Header pdrvver.h besteht fast ausschließlich aus Präprozessor-Direktiven #define. Die ersten beiden, VER_FILETYPE und VER_FILESUBTYPE, die nicht geändert werden dürfen, zeigen an, dass es sich bei der Datei um eine Ressourcendatei für einen Treiber, insbesondere einen Druckertreiber, handelt. Die Konstanten VFT_DRV und VFT2_DRV_VERSIONED_PRINTER, die mit VER_FILETYPE und VER_FILESUBTYPE erscheinen, werden in der Struktur VS_FIXEDFILEINFO beschrieben. Die, die Sie ändern müssen, sind die letzten vier, und zwar die folgenden:

VER_DATEIVERSION

Diese Konstante sollte auf eine Folge von vier durch Komma getrennten WORD-Werten gesetzt werden. Das dritte und vierte WORD werden verwendet, um das hohe bzw. niedrige WORD der VS_FIXEDFILEINFO Struktur dwFileVersionLS zu setzen.

Die Bedeutung jedes der vier WÖRTER wird im Folgenden beschrieben.

Erste WORD

Reserviert. Dieser Wert sollte auf 0 gesetzt werden.

Zweites WORT

Stellt die Hauptversion des Treibers dar. Für Treiber im Benutzermodus setzen Sie dies auf 0x0003. Für Kernel-Mode-Treiber setzen Sie dies auf 0x0002.

Drittes WORT

Stellt die Feature-Set-Nummer mit einem High-Byte und einem Low-Byte dar.

Hohes Byte

Stellt eine größere Version des Funktionsumfangs dar. Bei einer neueren Version wird davon ausgegangen, dass sie eine Obermenge der Funktionen der vorherigen Version enthält. Erhöhen Sie diesen Wert mit jeder neuen Hauptversion.

Für Unidrv- und Pscript5-basierte Minitreiber unter Windows XP und höher, einschließlich Windows Updates und Service Packs, sollte dies auf 0x05 gesetzt werden.

Niedriges Byte

Stellt eine kleinere Funktionsversion dar - eine neue Version der gleichen Codebasis oder Architektur. Erhöhen Sie diesen Wert mit jeder neuen Nebenversion.

Bei Unidrv- und Pscript5-basierten Minitreibern, die auf den folgenden Betriebssystemversionen laufen, sollte dieses Byte wie gezeigt gesetzt werden:

  • Windows XP: Festlegen auf 0x01.

  • Erstes Windows XP Service Pack: Festlegen auf 0x01. (Die jeweilige Fehlerbehebungsnummer erscheint im vierten WORD).

  • Erstes Windows Update: Festlegen auf 0x02.

Viertes WORT

Steht für eine Fehlerbehebung oder eine Service Pack-Version. Erhöhen Sie diesen Wert bei der Veröffentlichung einer neuen Binärdatei, wenn es sich um eine Sammlung von Fehlerbehebungen oder ein Service Pack handelt.

Hier ist ein Beispiel für einen monolithischen Treiber:

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

In der Reihenfolge, von links nach rechts, ist der erste WORT-Wert Null, was er auch sein muss. Der Wert des zweiten WORTES ist drei, was anzeigt, dass es sich um einen Treiber im Benutzermodus handelt. Im dritten WORT bedeutet der Wert des High-Bytes (0X01), dass es sich um die erste Hauptversion handelt, und das Low-Byte desselben WORTES (0x00) zeigt an, dass es bisher noch keine Nebenversionen gibt. Das vierte WORT (0x0002) zeigt an, dass es sich um die zweite Bugfix- oder Service Pack-Version handelt. (Es wird kein Unterschied zwischen diesen Arten von Releases gemacht.)

Hier sind einige Unidrv-/Pscript5-basierte Minitreiber-Beispiele:

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

In der Reihenfolge, von links nach rechts, ist der erste WORT-Wert wie zuvor Null. Der Wert des zweiten WORTES ist drei, was anzeigt, dass es sich um einen Treiber im Benutzermodus handelt. Im dritten WORT zeigen die Werte für das High-Byte und das Low-Byte (0X05 bzw. 0x01) an, dass es sich um eine Version für Windows XP handelt. Das vierte WORT (0x0001) zeigt an, dass es sich um die erste Bugfix- oder Service Pack-Version handelt.

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

Wie zuvor ist das erste WORT gleich Null, und das zweite WORD zeigt an, dass es sich um einen Minitreiber im Benutzermodus handelt. Das dritte WORT (0x0502) zeigt an, dass dies die erste Windows Update-Version ist, die nach Windows XP veröffentlicht wurde. Das vierte WORT (0x0000) zeigt an, dass es sich weder um eine Fehlerbehebung noch um eine Service Pack-Version handelt.

VER_DATEIBESCHREIBUNG_STR

Diese Konstante sollte auf einen Namen gesetzt werden, der den Treiber identifiziert, wie im folgenden Beispiel.

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR

Setzen Sie diese Konstante auf einen Namen, der den internen Namen der Datei angibt (ohne den Pfad), wie im folgenden Beispiel.

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALER_FILENAME_STR

Setzen Sie diese Konstante auf einen Namen, der den ursprünglichen Namen der Datei angibt (ohne den Pfad), wie im folgenden Beispiel.

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"