VB2008でソフトを作成しています。
ユーザには、まず機能を制限した状態でソフトを提供し、ユーザが継続して利用したいという場合にはパスワードを伝え、
それを入力してもらうことによってソフトの全機能を利用できる、ということをやりたいと思っています。
その場合、パスワード(を暗号化したもの)をレジストリに書き込みたいのですが、レジストリの書き込みを行おうとすると、
「許可されていない操作を実行しようとしました。」というエラーとなります(ちなみに使用OSはVistaです)。
おそらく、管理者権限での実行が必要なのだと思いますが、このソフトは管理者権限のないユーザでも利用したいと考えています。
とりあえず、レジストリ書き込みについては管理者権限のあるユーザのみが実行できることとして、
1つのexeの中で、このレジストリ書き込み処理のみ管理者権限のあるものが実行できる、ということはできるでしょうか?
あるいは別exeを作成して、これを管理者権限で実行(マニュフェストというものを利用?)させないとだめでしょうか?
対象OSはVistaとXPです。
よろしくお願いします。
まずVISTA以降は、レジストリに対する書き込みは、管理者権限必須
です。
で、管理者権限の無いアプリが、一次的にせよ書き込み機能を有した
いと言うことは、その時点で管理者権限を取得しないとダメです。
次に管理者権限の無いアプリが、管理者権限を持つアプリを起動でき
るか?と言うことですが、アプリの起動はできます。
が、UACによって、許可しますか?のダイアログが表示されます。
ユーザーレベルで管理者権限を持てない権限設定が為されていた場合
マニフェストに設定してもダメで、完全な偽装プロセスを実行しない
と無理で、そうでない場合、別ユーザーの権限でアプリを実行すると
言うプログラム構造となり、ID/PWDの入力が必須です。
プログラム中に管理者権限を有するID/PWDを保持させて(埋め込んで)
必要な場合、その情報を使ってアプリ起動させる・・・のは可能です。
が、セキュリティー的にそのようなことを認めるのかどうか・・・
絶対に不可能か?
と言われれば、可能でできます。と私は答えますが、それを行う為の
技術・知識が当然必要で、またどういう方法を選択するかでも、判断
が必要です。
企業レベルですと、情報管理室管轄のお話ですネ!
部長職以上の役職権限の方に相談しましょう!
以上。参考まで
補足と言うか・・・
管理者権限を有する別ユーザーでレジストリにアクセスしたら
そのユーザーのレジストリに書かれてしまいますので、ダメで
すネ!
ただ厄介ですが、別ユーザーからでも書けないことは無いので
すが、リスクが大きいように思います。(実現する方法が)
ファイルじゃ〜ダメですか?
※ ほかによい方法があったら、有識者の方よろしく!
以上。
HKEY_LOCAL_MACHINE (HKLM) への書き込みは,元々管理者権限が必要です (NT4の頃の記憶もそうなっていました)。
ただ,ほとんどのローカルユーザがAdministratorsに属していたため,問題になっていなかっただけです。
Usersのユーザーがプログラムから書き込む必要がある場合は,
・HKEY_CURRENT_USERに書き込む (本則)
・インストーラでHKLM以下の書き込む先の権限を緩めておいて,そこに書き込む
のどちらかの方法が必要になります。
みなさま、ご回答ありがとうございました。
管理者権限で対応することはやらないことにしました。
その代わり、そのPCを使うユーザ単位で対応してもらうことにします。
そうなれば、管理者権限のないユーザーでもHKEY_CURRENT_USER以下のキーであればレジストリには書き込めますよね?
> そうなれば、管理者権限のないユーザーでもHKEY_CURRENT_USER以下のキーであればレジストリには書き込めますよね?
全部は調べていませんが,基本的に書き込めます (HKCU自体に,対象ユーザに対してフルコントロールが付いています)。
YuO様、ご回答ありがとうございました。
以下のYuOさんの別スレッド書き込みを参考にしたいと思います。
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+200909/09090011.txt
みなさま本当にありがとうございました。今後ともよろしくお願いします。
いちいちURLを貼るなよ。
っかURLを貼れる掲示板は有害サイト指定は解除されないぞ。