次の方法で共有


印刷ドライバーのバージョン管理

重要

プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、プリントサポートアプリデザインガイド.

Unidrv ベースおよび Pscript5 ベースのプリンター ミニドライバー、およびモノリシック プリンター ドライバー (IHV によって完全に開発されたドライバー) は、Microsoft Windows XP 以降でプリンター ドライバーのバージョン管理を使用する必要があります。 Windows XP 以降の印刷スプーラーは、バージョン管理情報を使用して、新しいオペレーティング システムのバージョンまたはサービス パックのインストール中、または新しいポイントアンドプリント接続が確立されたときに、適切なドライバー ファイルを選択できるようにします。

プリンター ドライバーのバージョン管理は、Windows 2000 以前の NT ベースのオペレーティング システム バージョンではサポートされていません。 これらのオペレーティング システムのバージョンでは、印刷スプーラーは、特定のドライバー ファイルをファイルのタイムスタンプのみに置き換えるかどうかの決定に基づいて行います。 新しい日付のファイルには古い機能が設定されている可能性がありますが、新しいファイルは常に古いファイルよりも優先して選択されます。 ファイルの日付を簡単に変更できるため、スプーラーが選択したファイルで正しい選択を行わないようにすることができます。

ドライバー ファイルの正しいバージョンがインストールされていることを確認するには、それらのファイルにバージョン番号を追加するだけです。 これを行うには、pdrvver.h (Windows ドライバー キットに付属) に軽微な変更を加え、そのファイルをプリンター ドライバー DLL リソース ファイルに含めます。 INF ベースのインストールを使用してモノリシック ドライバーを設定すると、古い DLL のタイムスタンプが新しい場合でも、新しい DLL が古い DLL によって上書きされないため、ドライバーのバージョン管理の利点もあります。

pdrvver.h ヘッダーは、プリプロセッサ #define ディレクティブのみで構成されます。 最初の 2 つ VER_FILETYPE と VER_FILESUBTYPE は、変更しないでください。ファイルがドライバー、特にプリンター ドライバーのリソース ファイルであることを示します。 VER_FILETYPE および VER_FILESUBTYPE と共に表示される定数 VFT_DRV と VFT2_DRV_VERSIONED_PRINTER は、VS_FIXEDFILEINFO 構造体で説明されています。 変更する必要がある最後の 4 つを次に示します。

VER_FILEVERSION

この定数は、4 つのコンマ区切りの WORD 値のシーケンスに設定する必要があります。 3 番目と 4 番目の WORD は、VS_FIXEDFILEINFO 構造体の dwFileVersionLS メンバーの高い WORD と低い WORD をそれぞれ設定するために使用されます。

4 つの各 WORD の意味を以下に示します。

[最初の WORD]

予約済み。 この値は 0 に設定します。

2 番目の WORD

ドライバーのメジャー バージョンを表します。 ユーザー モード ドライバーの場合は、これを 0x0003 に設定します。 カーネル モード ドライバーの場合は、これを 0x0002 に設定します。

3 番目の WORD

上位バイトと下位バイトの特徴セット番号を表します。

上位バイト

主要な機能セットリリースを表します。 新しいリリースでは、以前のリリースの機能のスーパーセットが想定されています。 新しいメジャー リリースごとにこの値を増分します。

Windows XP 以降で実行されている Unidrv および Pscript5 ベースのミニドライバー Windows 更新、Service Pack などの場合は、これを0x05に設定する必要があります。

下位バイト

マイナー機能セット リリース同じコード ベースまたはアーキテクチャからの新しいリリースを表します。 新しいマイナー リリースごとにこの値を増分します。

次のオペレーティング システム リリースで実行されている Unidrv および Pscript5 ベースのミニドライバーの場合、このバイトは次のように設定する必要があります。

  • Windows XP: 0x01 に設定します。

  • 最初の Windows XP Service Pack: 0x01 に設定します。 (特定のバグ修正番号は、4 番目の WORD に表示されます)。

  • 最初の Windows Update: 0x02 に設定します。

4 番目の WORD

バグ修正またはサービス パックのリリースを表します。 バグ修正またはサービス パックのコレクションである場合は、新しいバイナリのリリース時にこの値を増分します。

モノリシック ドライバーの例を次に示します。

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

左から右の順序で、最初の WORD 値は 0 である必要があります。 2 番目の WORD の値は 3 で、これがユーザー モード ドライバーであることを示します。 3 番目の WORD では、上位バイトの値 (0X01) はこれが最初のメジャー リリースであることを示し、同じ WORD (0x00) の下位バイトはマイナー リリースがないことを示します。 4 番目の WORD (0x0002) は、これが 2 番目のバグ修正または サービス パックのリリースであることを示します。 (これらの種類のリリースは区別されません)。

Unidrv/Pscript5 ベースのミニドライバーの例を次に示します。

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

前と同じように、左から右の順に、1 番目の WORD 値は 0 です。 2 番目の WORD の値は 3 で、これがユーザー モード ドライバーであることを示します。 3 番目の WORD では、上位バイト値と下位バイト値 (それぞれ 0X05 と 0x01) は、これが Windows XP のリリースであることを示しています。 4 番目の WORD (0x0001) は、これが 1 番目のバグ修正または サービス パックのリリースであることを示します。

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

前と同様に、1 番目の WORD は 0 で、2 番目の WORD はこれがユーザー モード ミニドライバーであることを示します。 3 番目の WORD (0x0502) は、これが Windows XP の後にリリースされた最初の Windows Update バージョンであることを示します。 4 番目の WORD (0x0000) は、これがバグ修正でもサービス パックのリリースでもないことを示します。

VER_FILEDESCRIPTION_STR

この定数は、次の例のように、ドライバーを識別する名前に設定する必要があります。

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR

次の例のように、この定数をファイルの内部名 (パスを含まない) を指定する名前に設定します。

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALFILENAME_STR

次の例のように、この定数をファイルの元の名前 (パスを含まない) を指定する名前に設定します。

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"