V4 プリンター ドライバのデバッガアタッチ方法

V4 プリンター ドライバをデバッグするときに、どのようにデバッガをアタッチすればよいか困ったことはありませんか?   明けましておめでとうございます!WDK サポートチームの石沢です。 今回は V4 プリンタドライバのレンダリングフィルタに Visual Studio をアタッチする方法をまとめたいと思います。 なお、ドライバパッケージの作成に関しては、まさかたさんの以下の記事を参考にしてください。今回はすでにドライバパッケージが出来上がっているものとして進めます。   プリンター用デバイスアプリのサンプルを動かしてみる https://blogs.msdn.microsoft.com/jpwdkblog/2013/05/21/12427/   プリンタドライバのデバッグ方法については、基本的には A 尾さんの以下の記事が元となっているのですが、実際にレンダリングフィルタのソースコード上でブレイクするところまでやってみたいと思います。   プリンタドライバやスプーラ コンポーネントをデバッグする https://blogs.msdn.microsoft.com/jpwdkblog/2009/06/26/1246-2/   具体的なデバッグまでの道のりは以下となります。   <デバッグまでの道のり> 1. V4 プリンター ドライバのインストール 2. PrintFilterPipelineSvc サービスのタイムアウト時間の設定 3. アプリケーションからの印刷 その 1 4. PrintFilterPipelineSvc サービスにデバッガをアタッチ 5. アプリケーションからの印刷 その 2   なお、今回動作を確認した環境は以下です。   ・OS: Windows 10 x86 Enterprise ・デバッガ:…


Windows 10 バージョン 1511 (OS build 10586) でシリアルポートやパラレルポート経由で印刷できない現象が修正されました

KB3140743 (OS Build 10586.122) が米国時間 2016 年 3 月 1 日 (日本時間 2016 年 3 月 2 日) に公開されました。その中の修正の一つについてご案内します。   Windows 10 update history http://windows.microsoft.com/en-us/windows-10/update-history-windows-10   March 1, 2016 – KB3140743 (OS Build 10586.122)   Improved support for devices including some wearables, displays, and printer scenarios.   この修正により、Windows 10 バージョン 1511 (OS build 10586) で発生していた「LPT…


Windows 8.1 のプリンター用デバイス アプリについて

こんにちは。JS です。   以前、まさかたさんが「プリンター用デバイスアプリのサンプルを動かしてみる」で Windows 8 におけるプリンター用のデバイスアプリについて紹介しておりました。Windows 8.1 になって、サンプルの動かし方が少々変わりましたので、改めてご紹介したいと思います。   手順は、前回と同じく、以下の 4 つに分けられています。 ① ダミーの V4 Printer Driver の作成とインストール ② サンプル デバイス アプリのビルドとインストール ③ デバイス メタデータ パッケージの作成とインストール ④ デバイス アプリの動作確認   ①v4 Printer Driver 作成とインストール まず、Visual Studio 2013 のプロジェクトテンプレートのウィザードを使って、ダミー用の v4 Printer Driver を作成します。基本的な v4 Printer Driver の基本的な作成方法は、以下の MSDN ドキュメントでも公開されておりますが、本記事で改めてご案内したいと思います。   Building a Basic v4 Printer…


Bitmap レンダリングプラグイン

皆様、お久しぶりです!   WDK サポートチームのI沢(アイザワ)でございます。 2014 年ももうすぐ終わろうとしておりますが、皆様いかがお過ごしでしょうか。   年末と言えば年賀状。年賀状と言えばプリンタ。プリンタと言えばドライバですね! 今回は、そんなプリンタドライバに関するお話でございます。   以前、A 尾さんのエントリ 「プリンタ ドライバ、スプーラ コンポーネントの WDK サンプル」 にて "bitmap レンダリングプラグイン" をご紹介されておりましたが、なんとこちらのプラグインを使用することでプリンタが無くても、印刷結果を紙の代わりに画像ファイルとして出力することができます! 本プラグインは UNIDRV のプラグインとなっておりますので、開発している UNIDRV のプラグインの参考として利用できます。 また、印刷結果が意図しない結果となった場合などに、自身が作成したドライバーに依存した問題か、それとも他のドライバーでも現象が再現するものかなど、原因の切り分けにも活用できるので、私共も非常によく使用するサンプルでございます。   今回はそんな便利なプラグインのビルド方法から、印刷結果を確認するところまでご案内いたしますのでお付き合いいただけますと幸いです。     サンプルのビルド まずはサンプルのダウンロードからビルドまで手順をご説明いたします。 ビルドはインストール先のターゲットマシンを 32bit 版 Windows 8.1 と想定してビルドします。   1. サンプルをダウンロード 以下の URL からサンプルをダウンロードして適当な場所に解凍します。ここでは、"C:\OEM Printer Customization Plug-in Samples" に解凍したものとして進めます。   OEM Printer Customization Plug-in…


プリンター用デバイス アプリのサンプルを動かしてみる

久方ぶりです。まさかたです。 前回の記事では、デバイスメタデータパッケージの作成を、ウィザード形式で行うことのできる、デバイスメタデータ作成ウィザードをご紹介しました。 今回は、その続きとして、実際に作成したデバイス メタデータ パッケージで、デバイスとデバイス アプリが連携して動作するところまでを、下記のようにプリンター用のデバイスアプリのサンプルが公開されていますので、これを例にご紹介したいと思います。 Device app for printers SDK sample <http://code.msdn.microsoft.com/windowsapps/Device-app-for-printers-91f363a9> 大まかな手順は、下記のようになります。 ① ダミーの V4 Printer Driver の作成とインストール ② サンプル デバイス アプリのビルドとインストール ③ デバイス メタデータ パッケージの作成とインストール ④ デバイス アプリの動作確認 ① ダミーの V4 Printer Driver の作成とインストール 今回は、Visual Studio 2012 のプロジェクトテンプレートのウィザードを使って、ダミーの V4 プリンター ドライバーを作成してみます。 ウィザードの進め方については、下記ドキュメントがご参考になると思います。 V4 印刷ドライバーの開発 <http://msdn.microsoft.com/ja-jp/library/windows/hardware/br259124.aspx> ※「3. V4 プリンタードライバーの開発 – 3.1 Visual Studio…


Printing – NT EMF データの留意点

ご無沙汰しております。なおきお~です。梅雨時期は、湿気が多く過ごしづらい日も多いかと思いますが、皆さん、如何お過ごしでしょうか? さて、今回は、A尾さんの記事のプリンティングについて、ちょっと補足をしたいと思います。   A尾さんの「印刷時のスプーリングについて」では、NT EMF データや RAW データといったスプール データについて、解説があったかと思います。 この記事にあるとおり、データの種別に関わらず、プリント プロセッサのみとなります。   RAW データは、プリンタ デバイスに依存したデータ種別であるため、プリンタ ドライバ開発される方々が熟知されていると思いますし、ReadPrinter() でスプール データを読み込み、WritePrinter() で、プリント モニタ(ランゲージ モニタやポート モニタ) に通知するので、比較的 シンプルな構造になると思います。 Windows OS 標準のプリント プロセッサでも、RAW で始まるスプール データは、同じ概念で実装されています。     対して、NT EMF データは、バージョンがたくさんありますが、全て GdiStartDocEMF() といった GDI Functions for Print Processors にある API を使用してハンドリングします。 この API のリストを見ていただくと気づかれる方もいらっしゃると思いますが、ページ単位でしか NT EMF データをハンドリングすることができません。 つまり、ページの中に新たにレンダリング データを追加することはできませんし、削除することもできません。 また、NT EMF…


Spooler Notification

お久しぶりです。A尾です。 今回は Spooler Notification についてお話ししようと思います。   Spooler Notification は、スプーラ サービスのコンポーネントとアプリケーションとの間で通信を行う、Windows Vista よりサポートされた機能です。スプーラ コンポーネントはスプーラ サービス上 (セッション 0) で動作するため、ダイアログ等の UI を表示したりして、印刷ジョブのステータスなどを表示することが出来ません。(詳細はこちら)しかしながら、この機能を利用することで、スプーラ コンポーネントから情報を受け取ったアプリケーションが、その情報をもとに UI を表示したりすることが出来ます。   Spooler Notification では、Notification の種類 (GUID)、Notification の対象 (PerUser / AllUsers)、Notification の方向 (BiDirectional / UniDirectional) を指定することが出来ます。アプリケーションは、これらと IPrintAsyncNotifyCallback オブジェクトを指定して RegisterForPrintAsyncNotifications を呼び出し、スプーラ コンポーネント側からの Notification を待ちます。そして、スプーラ コンポーネントが RouterCreatePrintAsyncNotificationChannel を呼び出すと、条件にマッチする Notification を待っているアプリケーション (IPrintAsyncNotifyCallback オブジェクト) に Notification が行きます。なお、スプーラ コンポーネントとアプリケーションの通信はあくまで非同期で行われます。そのため、同期されることを前提にスプーラ…


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 にストアされた後、システムにインストールされるようになりました。そのため、ローカルにてインストールするのと同様にインストール時にドライバ署名のチェックが可能となり、また、本来依存関係にあるファイルが、異なるモデル、バージョンのドライバがインストールされることにより互換性が無くなってしまうようなことが回避可能となりました。  …


Printer Driver Isolation

こんにちは、A尾です。 前回の予告通り、今回は Windows 7 よりサポートされた Printer Driver Isolation についてお話しさせていただきます。   Windows 7 以前の Windows OS では、プリント プロセッサやプリンタ ドライバはスプーラ サービスのプロセス上にて動作していましたが、Windows 7 以降では、Printer Driver Isolation により、これまでスプーラサービス上で動作していたプリント プロセッサやプリンタ ドライバをスプーラ サービス以外の別プロセス上にて動作させることが出来るようになりました。これまでは印刷時のプリントプロセッサやプリンタ ドライバの動作に起因してスプーラ サービスが落ちてしまっていたような状況においても、この機能にてプロセスを分離させることで、スプーラ サービスが落ちてしまうのを回避できるようになりました。(RAW スプーリングの場合はこれまで通り、プリンタ ドライバはアプリケーション プロセスから呼ばれます。) 開発環境やスタンド アロン環境ではあまり恩恵を受けることはあまりないかもしれませんが、プリント サーバーなどのスプーラ サービスが意図せず終了してしまう状況が許されない環境では重宝される機能かと思います。     ■ プロセス分離モードについて Printer Driver Isolation には、「なし」「共有」「分離」の3つのモードがあり、プリンタドライバごとに設定が可能です。   「なし」 プロセスの分離を行いません。 これまで通りスプーラ サービス上にてプリント プロセッサやプリンタ ドライバが呼び出されます。   「共有」 プロセスの分離を行います。…


印刷時のスプーリングについて(その2)

こんにちは、A尾です。 色々とバタバタとしておりまして、しばらくぶりとなってしまいました。申し訳ありません。 前回はローカルにインストールしたプリンタで印刷した際のスプーリングについてお話ししました。今回は Point and Print によりインストールしたプリンタで印刷した際のスプーリング動作についてお話ししたいと思います。   Point and Print によるインストールについてですが、Point and Print によるインストールとはプリント サーバー等のネットワーク上の PC から共有されているプリンタを、他のクライアント PC から接続してインストールすることを言います。具体的には、主に以下の3つの方法があります。   1.エクスプローラのネットワークコンピュータ上に表示される共有プリンタ (アイコン) をダブルクリックするか、もしくは右クリック→[接続] を選択してインストール。 2.プリンタの追加ウィザードから、リストアップされたネットワーク上の共有プリンタを選択するか、プリンタ名 \\<サーバー PC 名>\<プリンタ共有名> を直接指定してインストール。 3.AddPrinterConnection API からインストール。   Point and Print によりインストールしたプリンタの場合も、ローカルにインストールしたプリンタと同様に、RAW スプーリングと NT EMF スプーリングがあります。 ただ、印刷を行う PC とプリンタにデータを転送する PC が異なりますので、NT EMF スプーリングの場合には、NT EMF スプール ファイルの再生をクライアント PC 上で行うか、サーバー PC…