- - PR -
Windows Vistaのレジストリ編集について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-12 15:13
さるさんの助言により、こちらに質問を移させていただきました。
初めまして、つくね。と申します。 開発環境:WindowsXP VC++6.0 実行環境:WindowsVista 現在、Windows2000で稼動していたプログラムをWindowsVistaに移行するためテストを行っています。 その中で、レジストリの内容を編集する必要があるのですが、管理者権限ではアクセス権を変更する事ができず、 「アクセスが拒否されました」のエラーが発生します。 サブキーの追加・編集を行う必要があるキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class 実際にエラーが発生するのは以下の文 RegOpenKeyEx(HKEY_LOCAL_MACHINE, plpszAccessKey, 0, KEY_READ | WRITE_DAC, &hProc); 以上です。どなたかお心当たりのあるかたが、いらっしゃいましたらご教示願います。 | ||||
|
投稿日時: 2007-04-12 15:26
VistaのFAQかと。
UACについて調べてみてください。 プログラムを変えないで対応したいのであればマニフェストファイルを使ってください。 また、UACが関連するのはレジストリだけではないです。 ですのできちんとWindows Vista対応するのであれば、ファイル/レジストリ/OSの設定 周りでプログラムが何かしていないかを確認すべきでしょう。 # まぁ、実際私がつい最近までやっていた作業ですけど、、、 | ||||
|
投稿日時: 2007-04-12 16:22
Blue様
ご返事ありがとうございます。 UACについて、調査・勉強してみたいと思います。 | ||||
|
投稿日時: 2007-04-12 16:37
アクセス権は確認しましたか? XP-SP2 で動作確認してみましたか? いずれにしても、質問する前にエラーの主要因くらいは確認しましょうね。 #確認してたら質問する内容が違ってくるはずですし... で、あえて答えは書きません。御自身の目でご確認ください。 ちなみに、XP-SP2 でも同じエラーでると思います。 なので、UAC はまったく関係ありません。スイッチ切ってもエラーは消えませんしねw _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで | ||||
|
投稿日時: 2007-04-12 17:13
完全に間違ったこと言っていたようです。 指摘してもらって、すみません。 # 頭の中でVista対応→UACと決めつけているようで。orz | ||||
|
投稿日時: 2007-04-12 17:22
とっちゃん様 Blue様
すみません、初心者なものでいろいろとご迷惑をおかけします。 始めに書けばよかったのですが。。。 確認した内容と結果は以下の通りです。 Windows2000: 当然動作する WindowsXP(SP2): 正常に動作 WindowsVista(UAC無効): 動作しない レジストリエディタで確認したところ、上記のキーに対し、管理者にはアクセス権はありません。(読み取りのみ) アクセス権を変更しようとしたところで、その行為自体が拒否されてしまいます。 exeファイルのプロパティ→互換性→互換モード で、「互換モードでこのプログラムを実行する」をチェックし、 「Windows2000」を選択する事でとりあえずこのエラーは出なくなりました。 あとは、もう少し勉強し調査を続けたいと思います。 | ||||
|
投稿日時: 2007-04-12 18:59
アクセス権の変更が出来ないということは、その部分に対しては、たとえ管理者であろうとも、操作を認めないということだと思います。 Vista はこれまで(2003を含む)のOSと比べると、非常にセキュリティに対して敏感になっており ここまでやるか?と思うような箇所ですら、ブロックされるようになっています。 #ま、それもこれもこれまでずっと Administorators な運用をしてきた開発者を含むエンドユーザーの責任でもあるわけですがw なので、今までできた=今もできるとはかぎらないということをまずは念頭におく必要があります。 で、対応策は、互換性タブの設定でいいのでしょうか? #これで回避できる問題かどうかはわかりませんが。 あと、最初のコード部分で気になったのですが 「KEY_READ | WRITE_DAC」 は引数としてはちょっと不味いように見受けられます。 ここについては、ヘルプを確認してみてください。 そのあたりに原因がある「かも」しれません。 #動作確認してるわけじゃないので詳細はわかりません。 _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで | ||||
|
投稿日時: 2007-04-13 15:25
とっちゃん様
返信ありがとうございます。 既存ソースの開発は数年前に行われており、それ以降ほとんど手を加えられていません。 その間の設計に関する資料もほとんど残っておらず、さらに、 今や開発者はどこにいるのか、誰が開発したものなのかすらわからない状況で、 どのような意図でこのような処理を行っているのかもわからない箇所も多々存在する次第です。 「KEY_READ | WRITE_DAC」の引数に関しては、この局面で必要になるのは「WRITE_DAC」であるため、 そのように修正、実行してみましたが、結果は相変わらずです。 それならば、と試しに「KEY_READ」を指定してみましたが相変わらず。。。 まさに、「今までできた=今もできるとはかぎらない」のかな、、、と感じているところではありました。 ゆえに、処理の根本から見直す必要があるかも知れないな、、、と。 レジストリをどーのこーのと言うプログラムに携わるのはこれが初めてで、Vistaを扱うのも今回が初めて。 このような状況で、自分でも何がわからないのかわからなくなっているところ、 貴重なご意見を頂き、本当に助かりました。 こちらとしては、依頼され調査を行っている立場で、どの程度までこの調査結果が役立たされるのか、 どのような対応策を取るのかと言った話になると、まだはっきりとはわかりませんが、 少なくとも「動作すること」を最優先として調査を行っておりますので、今回の事も含め報告をしたいと思います。 本当にありがとうございました。 |