WindowsのPrint Spoolerサービスと印刷時の仕組み

 
プリンタ周りの話になると、Windowsではスプーラー(もしくはスプーリング)という話がキーワードに出ます
しかし、実際その仕組み知っている人は少ないと思います

実は、Windowsの印刷時のスプーリングには2種類あります
  • NT EMF スプーリング
  • RAW スプーリング
NT EMFスプーリングが標準的なWindowsの印刷の仕組みになると思います
しかし、プリンタによってはRAWスプーリングになる場合もあります、これはドライバによって代わります

まずは、単純にローカルパソコン上にプリンタの設定・インストールをし設置した場合を考えてその仕組みを説明します

NT EMFスプーリング印刷時の仕組み

  1. アプリケーション印刷処理開始

  2. プリンタデバイス コンテキストへの描画のため、アプリケーションが GDI API を呼び出す

  3. 呼び出された API とそのパラメータから、GDI が WinSpool 経由で NT EMF スプール ファイルを作成する

  4. アプリケーション印刷処理終了

  5. プリントプロセッサが NT EMF スプール ファイルを再生する

  6. NT EMF レコードの内容を基に、GDI がプリンタ デバイス コンテキストへ描画を行う

  7. プリンタドライバの DDI 関数が呼ばれる

  8. プリンタドライバがプリンタ言語に基づいて RAW データを生成する

  9. ランゲージモニタが必要な処理を行う(もしあれば)

  10. ポートモニタが、プリンタ ポートの種類 (USB, TCP/IP etc) に合わせて出力処理を行う

  11. カーネルモード ドライバに RAW データが通知される

  12. プリンタに RAW データが通知される

RAWスプーリング印刷時の仕組み

  1. アプリケーション印刷処理開始

  2. プリンタデバイス コンテキストへの描画のため、アプリケーションが GDI API を呼び出す

  3. GDI がプリンタ デバイス コンテキストへ描画を行う

  4. プリンタドライバの DDI 関数が呼ばれる

  5. プリンタドライバがプリンタ言語に基づいて RAW データを生成する

  6. アプリケーション印刷処理終了

  7. プリントプロセッサは、 RAW データをそのまま下位に渡す

  8. ランゲージモニタが必要な処理を行う(もしあれば)

  9. ポートモニタは、プリンタ ポートの種類 (USB, TCP/IP etc) に合わせて出力処理を行う

  10. カーネルモード ドライバに RAW データが通知される

  11. プリンタに RAW データが通知される



参考、印刷時のスプーリングについて - Japan WDK Support Blog - Site Home - MSDN Blogs


2つの印刷ロジックのポイント


理解するポイントは、最終的にはプリンタが理解できるRAWファイルにプリンタドライバが変換をしなければならないが、どこの処理でプリンタドライバが登場するかという点です。
プリンターの印刷には、WindowsのPrint Spoolerサービス(スプーラサービス)が深く関わっていることがわかると思います

スプールファイル(NT EMFデータ、RAWデータ)のファイルサイズ比較

NT EMFデータとRAWデータのファイルサイズを比較して見ますと、テストプリントで上記のようになりました
  • 上段がRAWデータ
  • 下段がNT EMFデータ
一般的にはRAWデータよりNT EMFデータの方が軽いようです。


スプーリング方法の決定

スプーリング方法については、主に3つの要素から決定されます。
  • プリンタ プロパティの [詳細設定] タブ上にある [詳細な印刷機能を有効にする] チェックボックスです。
    チェックボックスを ON にすると NT EMF スプーリングが有効となり、OFF にすると RAW スプーリングとなります。

  • プリンタ ドライバの DrvEnablePDEV 関数にて設定する DEVINFO 構造体の flGraphicsCaps フラグに GCAPS_DONTJOURNAL がセットされているか否かです。
    このフラグがセットされていると RAW スプーリングとなり、設定されていないと NT EMF スプーリングとなります。

  • 印刷開始時にアプリケーションが呼び出す StartDoc API にて、DOCINFO 構造体の lpszDatatype に "emf" が指定されているか否かです。
    "emf" の場合には NT EMF スプーリングとなり、それ以外の文字列の場合は RAW スプーリングとなります。
上記うち、いずれか1つでも RAW スプーリングの設定となっている場合には RAW スプーリングされます。
つまり、全ての設定が NT EMF スプーリングとなっていないと、NT EMF スプーリングされません。

なので標準的な場合、一般的にはNT EMF スプーリングになっていることが多いです


共有プリンタ(プリントサーバー)を使用した場合の印刷の仕組み

Point and Print によりインストールしたプリンタの場合も、ローカルにインストールしたプリンタと同様に、RAW スプーリングと NT EMF スプーリングがあります。
ただ、印刷を行う PC とプリンタにデータを転送する PC が異なりますので、NT EMF スプーリングの場合には、NT EMF スプール ファイルの再生をクライアント PC 上で行うか、サーバー PC 上で行うかの選択肢が出てきます。
  • RAWスプーリング印刷時
  • NT EMF スプーリング(サーバー PC 上で再生する場合)
  • NT EMF スプーリング(クライアント PC 上で再生する場合)
標準では、WindowsXP以前は、「NT EMF スプーリング(サーバー PC 上で再生する場合)」になり
Windows Vista以降では「NT EMF スプーリング( クライアント PC 上で再生する場合 )」になります

RAWスプーリング印刷時


NT EMF スプーリング(サーバー PC 上で再生する場合)



NT EMF スプーリング(クライアント PC 上で再生する場合)



3つの印刷ロジックのポイント

ローカルプリンタの時と同じく
理解するポイントは、最終的にはプリンタが理解できるRAWファイルにプリンタドライバが変換をしなければならないが、どこの処理でプリンタドライバが登場するかという点です。


NT EMF スプーリングのサーバー PC 上で再生する場合とクライアント PC 上で再生する場合の決定


RAWスプーリング処理の決定はローカルプリンタの時に説明しました
では
  • NT EMF スプーリング(サーバー PC 上で再生する場合)
  • NT EMF スプーリング(クライアント PC 上で再生する場合)
は、どのように決定されるのでしょうか?

これは「CSR の設定」で変わります
プリンタ プロパティの [共有] タブを開くと、Windows Vista では「クライアント コンピュータで印刷ジョブのレンダリングを行う」、Windows 7 では「クライアントコンピュータに印刷ジョブを表示する」というチェックボックスがあります。
このチェック ボックスを ON にすると CSR が有効となり、OFF にすると CSR が無効となります。
  • Client Side Rendering 機能 (CSR) が無効設定の場合
    → NT EMF スプーリング(サーバー PC 上で再生する場合)
  • Client Side Rendering 機能 (CSR) が有効設定の場合 
    NT EMF スプーリング( クライアント PC 上で再生する場合)
Windows Vista 以降ではこのCSR設定が標準で有効になっているため、一般的に標準では「NT EMF スプーリング( クライアント PC 上で再生する場合)」と言えます。
クライアントPC が Windows Vista 以降の場合のみ、この CSR の設定が適用されますので、CSR 機能がサポートされていない Windows 2000 や Windows XP においては常にサーバー側でレンダリングが行われます。


サブページ リスト

作成日:2012/03/27
更新日:
Comments