次の方法で共有


プリンター ドライバーの分離

重要

プリンターデバイス開発における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 プリンターのドライバー分離設定を列挙します。
FindFirstPrinterChangeNotificationFindNextPrinterChangeNotification プリンターのドライバー分離設定の変更に関する通知を要求します。

データの形式は次のとおりです。

  • "\" を使用して各グループのドライバーを区切ります

  • "\\" を使用して各ドライバー グループを区切ります

最初のグループは、スプーラー プロセスにドライバーを読み込みます。 後続の各グループは、グループごとに分離されたプロセスでドライバーを読み込みます。 2 番目のグループは、他の分離対応ドライバーが既定で読み込まれる "共有" グループと見なされます。

管理によるドライバー分離モードの構成

コンピューター管理者は、Windows 印刷管理コンソールを使用するか、Windows スプーラー関数を呼び出して、コンピューターにインストールされている各プリンター ドライバーのドライバー分離設定を構成できます。 管理者は、次の表に示す設定のいずれかを使用するようにドライバーを構成します。

ドライバー分離モード 意味
共有済み 他のプリンター ドライバーと共有されているがスプーラー プロセスとは別のプロセスでドライバーを実行します。
Isolated スプーラー プロセスとは別の、他のプリンター ドライバーと共有されていないプロセスでドライバーを実行します。
なし スプーラー プロセスでドライバーを実行します。

理想的なのは、プリンター ドライバーを共有モードで実行できることです。 つまり、他のプリンター ドライバーと共有されているがスプーラー プロセスとは別の分離されたプロセスで実行することです。 スプーラー プロセスとは別のプロセスで実行できる一方で、プロセスを他のドライバーと共有できない場合は、ドライバーを分離モードで実行する必要がある場合があります。 たとえば、ドライバーが適切に設計されていない場合、ファイル名が関連するドライバーまたは同じドライバーの異なるバージョンと競合する可能性があります。また、ドライバーで頻繁にエラーが発生したり、同じプロセスで実行される他のドライバーの動作を妨げるメモリ リークが発生したりする可能性があります。

トラブルシューティングをサポートするために、ドメイン管理者は、ドメイン内のコンピューターでドライバー分離機能を無効にできます。また、管理者は、コンピューター上のすべてのプリンター ドライバーを強制的に分離モードで実行できます。 分離モードでは、各ドライバーをスプーラーや他のプリンター ドライバーとは別のプロセスで実行する必要があります。

グループ ポリシーによってドライバーの分離が無効になっている場合、すべてのプリンター ドライバーに対して分離がオフになります。 分離が有効になっている場合は、それぞれのドライバーのモードがチェックされます。 ドライバーに分離モードが設定されている場合、ドライバーは、レジストリ エントリに基づいて、共有モード、分離モード、またはなしモードで実行されます。 ただし、分離モードが設定されておらず、分離と互換性がある場合、ドライバーは共有モードで実行されます。 ドライバーがこのモードと互換性がない場合は、グループ ポリシーのオーバーライドによって、ドライバーが共有モードとなしモードのどちらで実行されるかが決まります。

次のグラフは、ドライバー分離モードを選択するための決定マップを示しています。

ドライバー分離モードを選択するためのフローチャート。

ドライバーの分離で使用できるスプーラー関数

ドライバーの分離では、特定の関数のみが許可されます。

Spoolss.dll 関数

次の関数は、spoolss.dll によってエクスポートされます。これらは、spoolss.lib にリンクすることでスプーラー プラグインで使用できます。

WinSpool.drv 関数

次の関数は、winspool.drv によってエクスポートされます。これらは、Winspool.h にリンクすることでスプーラー プラグインで使用できます。

関連項目

スプーラー コンポーネントの機能と構造