none
VISTAでプリンタドライバのサイレントインストール RRS feed

  • 質問

  • VISTAで

    AddPrinterConnection関数を使用してプリンタドライバをインストールしたいのですが、

    プリンタドライバのインストールダイアログや昇格ダイアログは出したくありません。

     

    プリンタドライバのインストールダイアログは、

    [HKEY_CURRENT_USER\Printers\LegacyPointAndPrint]
    "DisableLegacyPointAndPrintAdminSecurityWarning"=dword:00000001

    にすれば表示されなくなることは判りました。

     

    問題は昇格ダイアログを出したくない点です。

     

    そこで自前のサービス(Local System)を作成し、アプリからの依頼をパイプで受け取って

    AddPrinterConnection関数を呼び出したところ、rc=5(アクセスが拒否されました)

    が帰って来てしまいました。

    いくつかの特権が無効だからかと思い、

    OpenProcessToken→LookupPrivilegeValue→AdjustTokenPrivileges

    で特権を全て有効にしたのですが、同じ結果でした。

     

    しかし、サービスにおいてセキュリティコンテキストを偽装して実行したところ問題なく

    ドライバがサイレントインストールされました。

    LogonUser→ImpersonateLoggedOnUser→AddPrinterConnection→RevertToSelf

     

    しかし、問題はユーザ名はわかってもパスワードがわからないため、LogonUser関数が

    使えない点です。

    ユーザ名は、サービスに依頼したプロセスのIDから

    OpenProcess→OpenProcessToken→GetTokenInformation→LookupAccountSid

    で判るのですが、パスワードはわかりません。

     

    サービスに依頼したプロセスのアクセストークンからセキュリティコンテキストを偽装

    したのですが、結果的に降格してrc=5(アクセスが拒否されました)になってしまいました。

    OpenProcess→OpenProcessToken→ImpersonateLoggedOnUser

     

    こんなことを2日間もやって時間をつぶしています。

    どうしたらよいでしょう?

    救いの手を延べていただけないでしょうか。

     

     

    2008年5月20日 15:03

回答

  • どのような運用のために、その仕組みを実現したいのかを明らかにして欲しいと思います。

    それによってアドバイスの方向性も変わる可能性が出てくるかもしれません。

     

    ちなみに導入環境は社内等の限られたものですか?

    であれば、UAC自体を無効化するという手もなくはないような気がします。

     

    なお、一般向けや顧客向けのソリューションであるなら、”自由に”特権を代行するサービスのインストールは辞めた方が良いです。

    悪用されるリスクを考えると、昇格ダイアログくらい許容できそうです。

     

    -----

    私見ですが、UACの昇格ダイアログを(偽装・サービスの導入等で)スキップできたら、UACの意味がありません。

    他にもサービスがアプリからの依頼を受けて”自由に”管理者特権を行使するのであれば、そのサービスは弱点を作り出していることとなるので、UACの効力を失わせる要因になります。

     

    そうするぐらいなら、UACは切ってしまえば良いのではと思い、UAC無効化の提案をしています。

     

    2008年5月20日 15:17
    モデレータ
  • 私もAzuleanさんの意見に賛成です。

     

    操作がわずらわしいと言うことなんだと思いますけれど、知らないうちにインストールされてしまうことを防ぐ為の措置ですから

    UACを有効にしているのであれば、それは必要な手続きとして考える方が良いと思います。

     

    セキュリティ上、そのような措置は好ましくないと言う話にすれば、納得できるレベルの話ではないでしょうか。

     

    2008年5月21日 1:17
  •  ろくさん さんからの引用

    昔から、プリンタを増設した場合、プリンタ情報(マシン名と共有名)を登録するだけで、各クライアントでの印刷時に、自動的にドライバがインストールされ、印刷しておりました。

    本来、このような用向きではグループポリシーとか(XP等は)ログオンスクリプトが向いているような気がします。

    http://www.microsoft.com/japan/technet/windowsserver/2008/library/8433a76a-0a5d-48f4-893d-35442aa8765e.mspx

     

    通常のセッションにおいて、UACの昇格ダイアログをスキップできる手があればそれは不具合です。

     

    LogonUserで昇格ダイアログをパスできるというのであれば、インストール時に専用のユーザを作れば回避できるのかもしれませんが、結局(程度の差はあれど)脆弱になることは許容することになります。

    2008年5月21日 15:02
    モデレータ
  • UACにどのようなことを期待しているのでしょうか?

    各種サービスをインストールして穴を広げる状態は、UACの存在意義が問われます。

     

    また、これまでのOSは「あまりにも無防備すぎる」という言葉が示す状態だったと思います。その状態を看過できないと言うことになるのでしょうか?

    VistaのUACはOSレベルでユーザに不便を強いる形でセキュリティ向上を図っているものですから、今までと同じ操作感を求めることと、UACの意図するところとの両立は矛盾を感じられます。

     

     

    しかし、これらの主張をしたところで、上司が納得するかどうかは別の話だとも理解しています。

    悩ましい世の中です。
    2008年5月22日 13:57
    モデレータ
  • こんにちわ。

    役立つか不明ですが、標準ユーザが共有されたネットワークプリンタを利用する場合、GPOの「ポイントと印刷の制限」にプリンタを登録しているマシンを設定することで、UACをパスしてドライバのサイレントインストールを行うことが可能となります。

    最大文字制限が1024バイトというのがなんともなんですが・・・

    なお、ローカルプリンタを利用する場合、MS標準のプリンタドライバであれば、UACはパスしてインストールすることが可能ですので、対象をローカルプリンタドライバに変更する仕組みに変えることなんてどうでしょうか。

    MS標準のユニバーサルドライバだけというのがなんともなんですが・・・

     

    2008年5月23日 5:51

すべての返信

  • どのような運用のために、その仕組みを実現したいのかを明らかにして欲しいと思います。

    それによってアドバイスの方向性も変わる可能性が出てくるかもしれません。

     

    ちなみに導入環境は社内等の限られたものですか?

    であれば、UAC自体を無効化するという手もなくはないような気がします。

     

    なお、一般向けや顧客向けのソリューションであるなら、”自由に”特権を代行するサービスのインストールは辞めた方が良いです。

    悪用されるリスクを考えると、昇格ダイアログくらい許容できそうです。

     

    -----

    私見ですが、UACの昇格ダイアログを(偽装・サービスの導入等で)スキップできたら、UACの意味がありません。

    他にもサービスがアプリからの依頼を受けて”自由に”管理者特権を行使するのであれば、そのサービスは弱点を作り出していることとなるので、UACの効力を失わせる要因になります。

     

    そうするぐらいなら、UACは切ってしまえば良いのではと思い、UAC無効化の提案をしています。

     

    2008年5月20日 15:17
    モデレータ
  • 私もAzuleanさんの意見に賛成です。

     

    操作がわずらわしいと言うことなんだと思いますけれど、知らないうちにインストールされてしまうことを防ぐ為の措置ですから

    UACを有効にしているのであれば、それは必要な手続きとして考える方が良いと思います。

     

    セキュリティ上、そのような措置は好ましくないと言う話にすれば、納得できるレベルの話ではないでしょうか。

     

    2008年5月21日 1:17
  • >どのような運用のために、その仕組みを実現したいのかを明らかにして欲しいと思います。

    開発しているシステムは、特定業種の一般向けソリューションで、オフコン→Windows3.1→NT→XP→VISTAと移行してきました。

    昔から、プリンタを増設した場合、プリンタ情報(マシン名と共有名)を登録するだけで、各クライアントでの印刷時に、自動的にドライバがインストールされ、印刷しておりました。

    そのような文化のなかで、「これからは2~40台すべてのクライアントにプリンタドライバをインストールしてください」とは販社殿や顧客殿に言えないわけです。

     

    >そうするぐらいなら、UACは切ってしまえば良いのではと思い、UAC無効化の提案をしています。

    当初は、UACオフの案もありましたが、あまりにも無防備すぎるということで却下されました。

    特定のJavaw.exeをACT互換修正プログラムでRunAsAdminする案もあったのですが、ログオンと同時にソフトが自動起動しない(許可が必要)などの問題もあり、これも却下されました。

     

    2008年5月21日 1:29
  •  ろくさん さんからの引用

    昔から、プリンタを増設した場合、プリンタ情報(マシン名と共有名)を登録するだけで、各クライアントでの印刷時に、自動的にドライバがインストールされ、印刷しておりました。

    本来、このような用向きではグループポリシーとか(XP等は)ログオンスクリプトが向いているような気がします。

    http://www.microsoft.com/japan/technet/windowsserver/2008/library/8433a76a-0a5d-48f4-893d-35442aa8765e.mspx

     

    通常のセッションにおいて、UACの昇格ダイアログをスキップできる手があればそれは不具合です。

     

    LogonUserで昇格ダイアログをパスできるというのであれば、インストール時に専用のユーザを作れば回避できるのかもしれませんが、結局(程度の差はあれど)脆弱になることは許容することになります。

    2008年5月21日 15:02
    モデレータ
  • 回答頂きましてありがとうございます。m(_ _)m

     

    操作性をこれまでのOS上の製品と同じにすることを至上命令として受け取っておりましたので

    レジストリ操作やファイル操作(小容量)は、サービス経由でなんとかしのいでおりましたが

    プリンタドライバインストールについては、期待したようなことができないようですので、

    ちょっと気落ちしております。

     

    ありがとうございました。

     

    2008年5月22日 1:33
  • UACにどのようなことを期待しているのでしょうか?

    各種サービスをインストールして穴を広げる状態は、UACの存在意義が問われます。

     

    また、これまでのOSは「あまりにも無防備すぎる」という言葉が示す状態だったと思います。その状態を看過できないと言うことになるのでしょうか?

    VistaのUACはOSレベルでユーザに不便を強いる形でセキュリティ向上を図っているものですから、今までと同じ操作感を求めることと、UACの意図するところとの両立は矛盾を感じられます。

     

     

    しかし、これらの主張をしたところで、上司が納得するかどうかは別の話だとも理解しています。

    悩ましい世の中です。
    2008年5月22日 13:57
    モデレータ
  • こんにちわ。

    役立つか不明ですが、標準ユーザが共有されたネットワークプリンタを利用する場合、GPOの「ポイントと印刷の制限」にプリンタを登録しているマシンを設定することで、UACをパスしてドライバのサイレントインストールを行うことが可能となります。

    最大文字制限が1024バイトというのがなんともなんですが・・・

    なお、ローカルプリンタを利用する場合、MS標準のプリンタドライバであれば、UACはパスしてインストールすることが可能ですので、対象をローカルプリンタドライバに変更する仕組みに変えることなんてどうでしょうか。

    MS標準のユニバーサルドライバだけというのがなんともなんですが・・・

     

    2008年5月23日 5:51
  • To Azuleanさん

        nabuさん

     

    GPOというものがどういうものなのか、はたして

    XP-VISTA

    VISTA-VISTA

    2003SV-VISTA-XP

    2008SV-VISTA

    の混在環境でも使えるものなのか

    ユーザに面倒な操作をしてもらわなければならないのか等精査したいと思います。

     

    メーカも食いついてきたことですし...

     

    ご回答ありがとうございました。m(_ _)m

    2008年5月23日 9:20