プリンター ドライバーの分離
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください。
プリンター ドライバーの分離により、印刷スプーラーが実行されるプロセスとは別のプロセスでプリンター ドライバーを実行できるようになり、Windows 印刷サービスの信頼性が向上します。
プリンター ドライバーの分離のサポートは、Windows 7、Windows Server 2008 R2、およびそれ以降のオペレーティング システムに実装されています。
Windows 7 および Windows Server 2008 R2 以降では、インボックス プリンター ドライバーは、プリンター ドライバーの分離をサポートし、分離されたプロセスで実行できる必要があります。
以前のバージョンの Windows では、プリンター ドライバーは常にスプーラーと同じプロセスで実行されていました。 スプーラー プロセスで実行されたプリンター ドライバー コンポーネントには、次のものが含まれていました。
印刷ドライバー構成モジュール
印刷プロセッサ
レンダリング モジュール
1 つの印刷ドライバー コンポーネントに障害が発生すると、印刷サブシステムに障害が発生し、すべてのユーザーとすべての印刷コンポーネントの印刷操作が停止する可能性がありました。
Windows 7 および Windows Server 2008 R2 以降では、管理者はオプションとして、分離されたプロセス (スプーラー プロセスとは別のプロセス) で実行するようにプリンター ドライバーを構成できます。 ドライバーを分離することで、管理者は、ドライバー コンポーネントの障害が原因で印刷サービスが停止するのを防ぐことができます。
スプーラー関数の詳細については、「スプーラー コンポーネントの関数と構造体」を参照してください。
INF ファイルでのドライバー分離のサポート
既定では、プリンター ドライバーをインストールするための INF ファイルでドライバーがドライバーの分離をサポートしていることが示されていない場合、プリンター クラス インストーラーは、スプーラー プロセスで実行するようにドライバーを構成します。 ただし、ドライバーがドライバーの分離をサポートしていることが INF ファイルに示されている場合、インストーラーは、分離されたプロセスで実行するようにドライバーを構成します。 管理者は、これらの構成設定をオーバーライドして、スプーラー プロセスと分離されたプロセスのどちらでドライバーを実行するかについて、ドライバーごとに指定できます。
ドライバーの分離をサポートするために、プリンター ドライバーのインストールに使用される INF ファイルで DriverIsolation キーワードを使用して、ドライバーがプリンター ドライバーの分離をサポートしているかどうかを示すことができます。 DriverIsolation=2 の設定は、ドライバーがドライバーの分離をサポートしていることを示します。 DriverIsolation=0 の設定は、ドライバーがドライバーの分離をサポートしていないことを示します。 INF ファイルから DriverIsolation キーワードを省略すると、DriverIsolation=0 の設定と同じ効果があります。
ドライバー分離設定のスプーラー関数
次の表に、管理者がドライバー分離設定を構成するために使用できるスプーラー関数を示します。
関数名 | 操作 |
---|---|
GetPrinterDataEx | プリンターのドライバー分離設定を取得します。 |
SetPrinterDataEx | プリンターのドライバー分離設定を設定します。 |
EnumPrinterDataEx | プリンターのドライバー分離設定を列挙します。 |
FindFirstPrinterChangeNotification、FindNextPrinterChangeNotification | プリンターのドライバー分離設定の変更に関する通知を要求します。 |
データの形式は次のとおりです。
"\" を使用して各グループのドライバーを区切ります
"\\" を使用して各ドライバー グループを区切ります
最初のグループは、スプーラー プロセスにドライバーを読み込みます。 後続の各グループは、グループごとに分離されたプロセスでドライバーを読み込みます。 2 番目のグループは、他の分離対応ドライバーが既定で読み込まれる "共有" グループと見なされます。
管理によるドライバー分離モードの構成
コンピューター管理者は、Windows 印刷管理コンソールを使用するか、Windows スプーラー関数を呼び出して、コンピューターにインストールされている各プリンター ドライバーのドライバー分離設定を構成できます。 管理者は、次の表に示す設定のいずれかを使用するようにドライバーを構成します。
ドライバー分離モード | 意味 |
---|---|
共有済み | 他のプリンター ドライバーと共有されているがスプーラー プロセスとは別のプロセスでドライバーを実行します。 |
Isolated | スプーラー プロセスとは別の、他のプリンター ドライバーと共有されていないプロセスでドライバーを実行します。 |
なし | スプーラー プロセスでドライバーを実行します。 |
理想的なのは、プリンター ドライバーを共有モードで実行できることです。 つまり、他のプリンター ドライバーと共有されているがスプーラー プロセスとは別の分離されたプロセスで実行することです。 スプーラー プロセスとは別のプロセスで実行できる一方で、プロセスを他のドライバーと共有できない場合は、ドライバーを分離モードで実行する必要がある場合があります。 たとえば、ドライバーが適切に設計されていない場合、ファイル名が関連するドライバーまたは同じドライバーの異なるバージョンと競合する可能性があります。また、ドライバーで頻繁にエラーが発生したり、同じプロセスで実行される他のドライバーの動作を妨げるメモリ リークが発生したりする可能性があります。
トラブルシューティングをサポートするために、ドメイン管理者は、ドメイン内のコンピューターでドライバー分離機能を無効にできます。また、管理者は、コンピューター上のすべてのプリンター ドライバーを強制的に分離モードで実行できます。 分離モードでは、各ドライバーをスプーラーや他のプリンター ドライバーとは別のプロセスで実行する必要があります。
グループ ポリシーによってドライバーの分離が無効になっている場合、すべてのプリンター ドライバーに対して分離がオフになります。 分離が有効になっている場合は、それぞれのドライバーのモードがチェックされます。 ドライバーに分離モードが設定されている場合、ドライバーは、レジストリ エントリに基づいて、共有モード、分離モード、またはなしモードで実行されます。 ただし、分離モードが設定されておらず、分離と互換性がある場合、ドライバーは共有モードで実行されます。 ドライバーがこのモードと互換性がない場合は、グループ ポリシーのオーバーライドによって、ドライバーが共有モードとなしモードのどちらで実行されるかが決まります。
次のグラフは、ドライバー分離モードを選択するための決定マップを示しています。
ドライバーの分離で使用できるスプーラー関数
ドライバーの分離では、特定の関数のみが許可されます。
Spoolss.dll 関数
次の関数は、spoolss.dll によってエクスポートされます。これらは、spoolss.lib にリンクすることでスプーラー プラグインで使用できます。
WinSpool.drv 関数
次の関数は、winspool.drv によってエクスポートされます。これらは、Winspool.h にリンクすることでスプーラー プラグインで使用できます。