次の方法で共有


V4 ドライバー セットアップ概念

重要

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

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

v4 印刷ドライバー モデルでは、新しいセットアップ モデルを使用して、ユーザー エクスペリエンスを向上させ、サポート コストを削減します。

v4 印刷ドライバーは、ドライバー ストアから直接実行されます。これにより、ファイルの競合の可能性がなくなり、インストールのパフォーマンスが向上します。 v4 セットアップ モデルは引き続き INF ファイルを使用しますが、プリンター固有のセットアップ ディレクティブをキャプチャするために新しいマニフェスト ファイルも使用します。

デバイス識別子

CompatibleIDS

CompatibleID は、新しいバージョンの Windows がリリースされた後にリリースされたデバイスをドライバーでサポートできるため、ドライバーを更新する必要がないため、印刷クラス ドライバーの重要な概念です。 これは、CompatibleID を使用すると、デバイスで HardwareID よりも固有でない印刷ドライバーのサポートをアドバタイズできるためです。

特定の CompatibleID が印刷クラス ドライバーで既にサポートされている場合は、v4 印刷ドライバーで再度指定する必要はありません。 印刷ドライバーの日付が印刷クラス ドライバーの日付より新しい場合、印刷ドライバーは Windows Update サイトから自動的にダウンロードされます。

デバイスは、1284ID 文字列に CompatibleID を含める必要があります。 既存の印刷クラス ドライバーがデバイスをサポートしている場合、印刷ドライバーはその CompatibleID を使用する必要があります。それ以外の場合は、次の形式を使用することをお勧めします。

1284_CID_<manufacturer identifier>_<PDL identifier>_device family identifier

次に例を示します。

1284_CID_FA_PCL5e_Laser

CompatibleID が既に既存のデバイスに実装されている場合、印刷ドライバーは引き続きそれらの CompatibleID を使用する必要があります。

CompatibleID は、TCP/IP ベースの印刷デバイスのインストールでは使用されません。 その結果、ユーザーはドライバーの名前のみを使用して適切なドライバーを識別する必要があります。 印刷クラス ドライバーが関係する場合は、製造元が、印刷クラス ドライバーでサポートされている任意のデバイスの互換性リストを Web サイトに提供することをお勧めします。 ルールと制限の完全な一覧を含む、ハードウェアに CompatibleID を実装する方法の詳細については、「印刷デバイスで互換性のある ID を実装する方法」を参照してください。

Microsoft では、いくつかの製造元に依存しない (標準) 印刷クラス ドライバーをサポートするために、いくつかの標準 CompatibleID をサポートしています。 次の表は、これらの標準 CompatibleID と、関連する PDL ファイルの種類を示しています。

PDL ファイルの種類 標準 CompatibleID
XPS 1284_CID_MS_XPS
OpenXPS (ECMA-388) 1284_CID_MS_OXPS
PCL6 1284_CID_MS_PCL6
PS 1284_CID_MS_PS

これらの標準印刷クラス ドライバーは、一部の機能セットのみをサポートするため、これらのクラス ドライバーを利用することを選択した製造元は、Bidi を使用して、より具体的な用紙サイズと構成を追加する強化されたドライバー構成を実装する必要があります。 次の表は、標準の印刷クラス ドライバーでサポートされている機能と関連するオプションを示しています。

機能 [オプション]
用紙サイズ Letter, A4
解決方法 300dpi, 600dpi
メディアの種類 普通紙
Nアップ 1, 2, 4, 6, 9, 16

PrinterDriverID

PrinterDriverID は、プリンター共有のドライバー間の互換性、およびドライバーとプリンター拡張機能の互換性を判断するために使用される新しい識別子です。 たとえば、サーバー上のドライバーがマニフェスト ファイルで PrinterDriverID を指定し、ドライバーを共有する場合、このプリンターに接続するクライアントは、ドライバー INF で同じ PrinterDriverID を指定するドライバーのローカル ドライバー ストアと Windows Update で検索します。 一致するドライバが見つかった場合は、そのドライバーを使用して接続が行われます。 クライアント コンピューターでは、ドライバー名を使用して一致する結果がフィルター処理されません。

次の方法で、互換性のあるすべてのドライバーに PrinterDriverID を指定する必要があります。

  • v4 マニフェストでの PrinterDriverID ディレクティブの使用。

  • v4 ドライバー INF の HardwareID として。

2 つの異なるドライバーが同じ PrinterDriverID を共有するには、共有に互換性がある必要があります。 接続を常に成功させるには、2 つのドライバーが次の操作を実行できる必要があります。

  • 同じ PDL をサポートする

  • 同じ種類の構成ファイル (GPD または PPD) を使用する

  • サーバー ドライバーの GPD、PPD、制約 JS ファイルで指定された機能またはオプションをレンダリングできる

  • 同じプリンター拡張機能をサポートする

スプーラーはこれらの制限を検証せず、2 つのドライバーが共有に互換性があるかどうかを示すため、PrinterDriverID のみに依存します。 製造元は、上記の項目のいずれかに変更が加えられた場合は、ドライバーの PrinterDriverID を必ず変更する必要があります。

プリンター拡張機能は、PrinterDriverID を介してドライバーに関連付けることもできます。 その結果、PrinterDriverID を共有する 2 つのドライバーは、両方とも同じプリンター拡張機能で動作する必要があります。 最後にインストールされたプリンター拡張機能は、対象となる PrinterDriverID を使用するすべてのデバイスに対して、それ以前のプリンター拡張機能を上書きするため、同じアプリを使用して正常に動作する必要があります。

GUIDs の使用に関するベスト プラクティス

GUID は、v4 印刷ドライバー モデル 、特に PrinterDriverID、PrinterExtensionID、EventID、ModelID などで広く使用されます。 これらは、システム内の異なる項目を一意に識別したり、サービス、共有などの目的で同じものとして識別するために使用されます。

新しい GUID を作成するときは、常に、Microsoft Visual Studio に含まれている GUID ジェネレーターや SDK に含まれる GUID ジェネレーターを使用します。 手動で作成された GUID と、誤ってコピーして貼り付けた GUID は、競合が発生しやすくなります。

セットアップの動作

v3 ドライバーの場合、印刷キュー名は最初にドライバー名、次にユーザーによって指示されます。 印刷クラス ドライバーの導入により、ドライバー名は、デバイスのユーザー認識にはあまり役に立ちません。 Windows は、v4 印刷ドライバーを実行するためにインストールされたプラグ アンド プレイ デバイスのキュー名を次のように自動的に変更します。

  1. 初期状態では、プリントキュー名はドライバ名に設定されています。

  2. ドライバーが v4 印刷ドライバーの場合、Windows は Bidi を使用してデバイスに対してクエリを実行します。

    1. \Printer.DeviceInfo:FriendlyName が指定されている場合は、新しいキュー名として使用されます。

    2. それ以外の場合、Windows は \Printer.DeviceInfo:Manufacturer、 \Printer.DeviceInfo:ModelName に対してクエリを実行します。

      1. 両方を指定すると、Windows はそれらを "Manufacturer ModelName" に連結します。

      2. これらの Bidi クエリのいずれかが失敗した場合、Windows は、もう一方のクエリからの正常な戻り値をキュー名として使用します。

  3. すべての Bidi クエリが失敗した場合、Windows は IEEE 1284ID を使用して製造元とモデル名を決定します。

    1. DESCRIPTION または DES が指定されている場合は、新しいキュー名として使用されます。

    2. それ以外の場合、Windows は MANUFACTURER または MFG と MODEL または MDL を検索します。

      1. 両方を指定すると、Windows はそれらを "MANUFACTURER MODEL" に連結します。

      2. これらのいずれかが失敗した場合、Windows はキュー名としてもう一方のキーの値を使用します。

プリンター追加ウィザード

ドライバー名は、プリンター追加ウィザードでドライバーを選択するユーザーが使用できる唯一の識別子です。 TCP/IP ベースのデバイスでは、TCP/IP 自動検出をサポートするために Port Monitor MIB (PWG 5107.1-2005) を実装する必要があります。 ハードウェア ID (HWID) マッピングを使用して印刷クラス ドライバーに追加される既存のデバイスでは、さらにデバイス固有のモデル名が使用される場合があります。

ポートの変更とプリンター デバイスノードの処理

一貫性のある UI エクスペリエンスを提供するために、すべての印刷キューにソフトウェア デバイス ノード (devnode) が与えられます。 これにより、UI でプリンターが検出され、仮想プリンター、共有プリンターへの接続、ネットワーク プリンターを、プラグ アンド プレイ (PnP) プリンターと同じ方法で列挙およびアクセスできます。 物理 PnP プリンターのソフトウェア デバイス ノードは、キューの作成をトリガーした PnP 開発ノードからプロパティを継承します。

2 つの異なるオブジェクトが関連付けられている場合、UI は デバイス ノード をデバイス コンテナーにグループ化します。 このグループ化により、多機能プリンター (複合機) が [デバイスとプリンター] フォルダーに 1 つのアイコンとして表示されます。 すべての機能が同じアイコンの下に表示されるようにするには、複合機内のすべての機能のコンテナー ID が同じである必要があります。 これは PnP デバイスに対して自動的に行われます。

キューに関連付けられているポートを変更すると、キューの デバイス ノード に関連付けられているコンテナー ID が変更されます。 これにより、キューは、物理デバイスの残りの PnP オブジェクトと同じデバイス コンテナーの下にグループ化されなくなります。 オペレーティング システムには、キューと PnP オブジェクトが分離した状況を適切にクリーンアップするための十分な情報がありません。 場合によっては、それがユーザーの実際の意図であることもあります。 ポート名を変更するユーザーまたはアプリケーションだけが意図した結果を認識し、キューのポートが変更された後に残された混乱状態をクリーンするのは、ユーザー/アプリケーション次第です。 次の 2 つの状況例と、適切にクリーンする方法を示す手順を示します。

  1. プリンターを設定する IT 管理者 – IT 管理者は、WS Discovery を使用してネットワーク上のプリンターを検索し、TCP/IP 管理プロセスが気に入っているため、ポートを TCP/IP に変更します。

    1. 期待 – デバイスとプリンター フォルダーに "デバイス" が 1 つだけ存在します。

    2. 解決策 – IT 管理者は、デバイスとプリンター フォルダーから WSD PnP devnode を削除します。

  2. IHV セットアップ ソフトウェア – IHV は、カスタム ポート モニターと共にドライバーをインストールします (カスタム ポート モニターは v4 では許可されませんが、v3 ドライバーにも同じドライバーノード処理が適用されます)。 IHV は、プリントキューの USB ポートを、デバイス製造元が作成したポートに変更します。

    1. 期待 – デバイスとプリンター フォルダーに "デバイス" が 1 つだけ存在します。

    2. 解決策 1 – PnP デバイス ノードは引き続き必要です。セットアップ プログラムは、PnP オブジェクトに一致するようにキュー デバイス ノードのコンテナー ID を変更します。

    3. 解決策 2 – PnP デバイス ノードは不要です。セットアップ プログラムによって元の PnP デバイスが削除されます。

ドライバーのランク付け

v4 印刷ドライバーを導入しても、プラグ アンド プレイのランク付け動作は変更されません。 デバイスが接続されると、スコアが最も高い使用可能なドライバーが選択されます。 選択したドライバーが印刷クラス ドライバーであり、Windows Update により良いランクの、一致するドライバがある場合、選択されたドライバは、ユーザーが次回 Windows の更新プログラムをダウンロードするときに自動的に置き換えられます。

ドライバー ランキングの詳細については、MSDN の「Windows のドライバーのランキング方法」をご覧ください。

ドライバーのセットアップのベスト プラクティス

パッケージ化

V4 プリント ドライバーは、needsincludes INF ファイル ディレクティブや、共有ファイルを扱うためのコア ドライバー テクノロジを採用していません。 その結果、v4 プリントドライバーは、いくつかの例外を除いて、自己完結型である必要があります。

V4 印刷ドライバーは、Windows が提供する一般的なファイルに依存し続ける可能性があります。 これには、NTPrint.INF または NTPrint4.INF のファイルが含まれます。 ドライバーは、v4 マニフェスト ファイルで RequiredFiles ディレクティブを指定することで、これらのファイルを含めることができます。

デバイスまたは PDL に基本的なレンダリング機能を提供する既存の印刷クラス ドライバーがある場合は、RequiredClass ディレクティブを使用してクラス ドライバーに依存するメカニズムもあります。 このディレクティブにより、Windows は v4 印刷ドライバーと必要な印刷クラス ドライバーの両方のファイルを使用してドライバーをビルドします。 GPD ファイルと PPD ファイルはマージされ、最も特定のファイルがより特定度の低いファイルより優先されます。 次の図は、GPD/PPD ファイルをマージするために使用されるロジックを示しています。また、Bidi から取得した拡張ドライバー構成ファイルも含まれています。 JavaScript 制約などの他のドライバー ファイルは、ドライバー パッケージにマージされません。

gpd/ppd file merge logic.

プリンター モデル ライン

Plug and Play は、モデル ライン上のすべての HardwareID と CompatibleID に対して暗黙のランキングを維持します。 その結果、Microsoft では、順位付けに関して予期しない動作を回避するために、パートナーが次のベスト プラクティスを使用することをお勧めしています。

v4 印刷ドライバー

  1. V4 印刷ドライバー INF では、次の 2 種類のモデル ラインを定義する必要があります。

    1. HardwareID lines: "Driver name" = INSTALL_SECTION, busenumerator\HardwareID

    2. PrinterDriverID lines: "Driver name" = INSTALL_SECTION,{GUID}

  2. V4 印刷ドライバー INF は、個々の行でバス固有の HardwareID を定義する必要があります。

    1. "Driver name" = INSTALL_SECTION,WSDPRINT\HardwareID

    2. "Driver name" = INSTALL_SECTION,USBPRINT\HardwareID

    3. "Driver name" = INSTALL_SECTION,LPTENUM\HardwareID

  1. 印刷クラス ドライバーの INF では、次の 3 種類のモデル行を定義する必要があります。

    1. HardwareID lines: "Driver name" = INSTALL_SECTION,HardwareID

    2. PrinterDriverID lines: "Driver name" = INSTALL_SECTION,{GUID}

    3. CompatibleID lines: "Print Class Driver name" = INSTALL_SECTION,,1284_CID_CompatID

  2. 印刷クラス ドライバーの INF では、バス列挙子 (WSDPRINT など) を定義することはできません。

印刷デバイスに互換性のある ID を実装する方法

Windows のドライバーのランキング方法

ポート モニター MIB (PWG 5107.1-2005)