Package-Aware プリンタ ドライバ
こんにちは。A尾です。
今回は Package-Aware プリンタ ドライバについてお話しさせていただきます。
既に皆さんご存知の方も多いかと思いますが、Windows Vista より、INF ファイルとその INF ファイルに記述されているドライバ構成ファイルを一つのオブジェクトとして扱うことを目的に、Driver Package という概念を取り入れられました。これにより、ドライバのインストール時は、まず Driver Store に Driver Package がストアされ、その後にドライバ構成ファイルがシステムにインストールされるようになりました。この動作はプリンタドライバにおいても同様ですが、プリンタ ドライバでは Point and Print というインストール シナリオも存在します。
Point and Print によりインストールが行われる場合、Windows Vista 以前の Windows OS では、サーバーからクライアントに個々のドライバ構成ファイルがダウンロードされ、ダウンロードされたファイルを使用してドライバのインストールが行われます。そのため、クライアントへのインストールの際、適切にドライバ署名が行われているかどうかのチェックが困難であったり、現在どのバージョンのドライバがインストールされているのか、どのバージョンのドライバが使用するモジュールがインストールされているのかを把握することが困難でした。
対しまして、Windows Vista からは、Driver Package の概念を利用した Package-Aware プリンタ ドライバというものが登場しました。
これにより、Point and Print によるインストール時には、サーバーからクライアントに Driver Package がダウンロードされ、クライアントの Driver Store にストアされた後、システムにインストールされるようになりました。そのため、ローカルにてインストールするのと同様にインストール時にドライバ署名のチェックが可能となり、また、本来依存関係にあるファイルが、異なるモデル、バージョンのドライバがインストールされることにより互換性が無くなってしまうようなことが回避可能となりました。
では、これまでに開発したプリンタ ドライバを Package-Aware プリンタ ドライバに変更するにはどうすればいいのでしょうか。実はそれほど難しいことではなく、大抵のプリンタドライバは INF ファイルを書き換えるだけで対応が可能です。ただ、書き換えると言っても2種類の方法がありますので、どちらで対応するかをプリンタドライバごとに判定する必要があります。
以下にそれぞれについて説明していきます。
1.他の Driver Package と共有するドライバ構成ファイルが存在しない場合
他の Driver Package とは完全に独立した Driver Package が対象となります。具体的には、対象となる Driver Package のドライバ構成ファイルの全てが、他の Driver Package (モデル) で使用されていないことが前提です。その場合、INF ファイルの変更は簡単で、PrinterPackageInstallation セクションを追加して、そこに PackageAware=TRUE という記述を追加するだけとなります。
詳細については Package-Aware Print Drivers that Do Not Share Files をご確認ください。
2.他の Driver Package と共有するドライバ構成ファイルが存在する場合
他の Driver Package と共有して使用するドライバ構成ファイルが存在する Driver Package が対象となります。わかりやすい例が、UniDrv や PScript5 を使用する Windows OS 付属のドライバ (inbox ドライバ) です。UniDrv や PScript5 は他の様々なプリンタ ドライバで使用されており、これが、他の Driver Package と共有するドライバ構成ファイルとなります。また、GPD ファイルや PPD ファイル、プラグイン モジュールなどが機種依存のドライバ構成ファイルとなります。
このような構成の Driver Package については、共有ファイル用の Driver Package (Core Driver Package) と機種依存ファイル用の Driver Package の二つに分ける必要があります。(必ずしも INF ファイルを分ける必要はありません。)
Core Driver Package の INF ファイルについては、以下を指定します。(詳細については Writing Core Drivers をご確認ください。)
1. Core Driver を識別するための GUID
→ Model セクションにて指定します。
2. Core Driver のバージョン
→ DriverVer ディレクティブにて指定します。
3. Core Driver の構成ファイル
→ 他の INF ファイルと同様に CopyFiles ディレクティブにて指定します。
4. プリンタの追加ウィザードのモデル一覧に Core Driver を表示しない
→ ControlFlags セクションの AlwaysExcludeFromSelect ディレクティブにて指定します。
また、機種依存ファイル用の Driver Package の INF ファイルでは、以下を指定する必要があります。(詳細については Using Core Drivers をご確認ください。)
1. 使用する Core Driver の GUID
→ Install セクションの CoreDriverSections ディレクティブにて指定します。
→ PrinterPackageInstallation セクションの CoreDriverDependencies ディレクティブにて指定します。
2. Package-Aware であること
→ PrinterPackageInstallation セクションに PackageAware=TRUE を指定します。
これで Package-Aware プリンタ ドライバへの置き換えは完了です。
いかがでしたでしょうか?
WDK には、Package-Aware に対応するためのサンプル INF ファイル "PackageAware.inf" もございますので、そちらも参考していただくとわかりやすいかと思います。(WDK 7600.16385.1 の場合、WinDDK\7600.16385.1\src\print\infs\PackageAware 配下にあります。)
それではまた。