トップ回答者
PRINTER_INFO_8とPRINTER_INFO_9

質問
-
PRINTER_INFO_9 の内容と PRINTER_INFO_8 の内容について教えてください。
MSDN の記述では、PRINTER_INFO_9 は“per user”、PRINTER_INFO_8 は“global”とのことですが、それぞれの内容は何を元に設定されるのか、という疑問です。
どうやら、PRINTER_INFO_8 はインストール時のデフォルト値、その後、プリンタの設定ダイアログを使って変更した内容が PRINTER_INFO_9 に入っている(設定変更しなければ、PRINTER_INFO_8 と PRINTER_INFO_9 は同じ)、という感じなのですが、この理解で合っているでしょうか。
だとすると、PRINTER_INFO_8 で取得できる内容はプリンタ(あるいはインストーラーやドライバ)によって固定である、ということになるでしょうか。
なお、プリンタのインストール・設定変更・PRINTER_INFO_8/9 を取得するアプリの実行は、すべて同一のユーザーです。経緯を説明しますと、印刷関連の処理をする Windows サービスを作ったのですが、GetPrinter() で PRINTER_INFO_9 が取得できない、という現象が起こっています。具体的には、戻ってきた PRINTER_INFO_9 の pDevMode が NULL になります。同じコードを通常のアプリケーションで実行すると正しく取得できるので、コード自体は合っていると思います。
調べていたら、PRINTER_INFO_8 は取得できるが、どうやら初期値っぽい設定になっているので、どういうことだろう、と思った次第です。
取得できない件については、サービスのユーザーを管理者権限を持ったユーザーにしてもだめなので、サービスであるがための制限だろうか、と想像しています。
PRINTER_INFO_8 の内容を書き換えてしまうツールを作る、という逃げもある、と思っているところですが、正しいところを把握したく、質問させていただきました。なお、“JAPAN Platform SDK(Windows SDK) Support Team Blog”の、サービスで印刷処理をする場合 .NET は使えない、という 2013/11/17 の記事には目を通してあり、そのようにしています。
回答
すべての返信
-
FYI
---------------------------------------------------------------
Impact of Session 0 Isolation on Services and Drivers in Windows
https://msdn.microsoft.com/ja-jp/library/dn653293(v=vs.85).aspx
---------------------------------------------------------------