正しい権限があってもレジストリ キーへのアクセスが拒否される

正しい権限があってもレジストリ キーへのアクセスが拒否される

Windows 10 Home 64 ビットのクリーン インストール (数日前のもの) を実行していますが、特定のレジストリ キーへのアクセスで問題が発生しています。Office VBA エディター (自分の制限付きユーザー アカウントでの 32 ビット プロセス) がレジストリをスキャンして使用可能なコントロールを探すと、{0002DF01-0000-0000-C000-000000000046}HKCR\CLSIDs ブランチの CLSID にヒットし、キーを読み取りモードで開くとアクセスが拒否され、続行できなくなります。このキーは HKLM ブランチにのみ存在し、HKCU ブランチには存在しません。既定値を見ると、これは "Internet Explorer(Ver 1.0)" 用です。これには 2 つのコピーがあります。1 つは Classes\CLSID パスに直接存在し、もう 1 つは 32 ビット プロセス用の Classes\WOW6432Node\CLSID パスにあります。これは Office 32 ビットなので、まず WOW6432Node バージョンに注目しました。

これまでのテスト:

  • このキーには、すでに私のユーザー アカウントの読み取り権限がありました... 何が起こっているのでしょうか?
  • 所有者は TrustedInstaller (なぜ彼なのか?) であり、このキーの権限は明示的に上書きされました (つまり、私が疑っているように継承されませんでした - なぜでしょうか?)
  • 所有者を Administrators に変更し、完全な権限を持つ特定のユーザー アカウントを追加しました。RegEdit の「有効なアクセス」タブでは、このユーザーが完全な権限を持っていることが確認されていますが、VBA IDE (この同じユーザー アカウントで実行) が読み取ろうとすると、アクセス拒否が引き続きトリガーされます。
  • 一時的にキーの名前を変更しました (たとえば、最初の「0」を「1」に置き換えます)。プロセス モニターによると、VBA IDE は名前を変更したキーを正常に読み取ることができるようになりました。アクセスが拒否されることはなくなりました。名前を元に戻すと、以前の動作に戻ります...
  • これは同じキーの 32 ビット バージョンと 64 ビット バージョンの間の衝突である可能性があると考え、このキーの 64 ビット バージョンで同じことを実行しようとしました。結果: デフォルトのアクセス許可で十分であり、所有権を Administrators に設定すると機能し、Administrators にフル コントロールを与えると機能しますが、管理者として RegEdit でキーの名前を変更することは許可されません。RegEdit は、「キーの名前変更エラー - レジストリ エディターは {0002DF01-0000-0000-C000-0000000000046} の名前を変更できません。キーの名前変更中にエラーが発生しました。」というメッセージを表示します (わあ、これは役立つ情報です!)。Process Monitor を使用すると、RegEdit の RegRenameKey 操作でもここでアクセスが拒否されることがわかります。
  • システム アカウントPsExec -s -i regedit.exe(タスク マネージャーで確認されたアカウント) を使用して RegEdit を実行しても、キーの名前を変更することはできません。

したがって、これは権限の問題ではないようです。他のプロセスが名前でこのキーへのアクセスをアクティブに監視し、拒否しているように見えます。正しい権限が設定されているかどうかに関係なく、管理者は 64 ビット バージョンのキーの名前を変更できず、32 ビット バージョンのキーを読み取ろうとする 32 ビット プロセスも「アクセスが拒否されました」というエラーを受け取ります。32 ビット プロセスは汎用 Classes\CLSID... パスを照会するため (つまり、RegEdit の名前変更のように WOW6432Node パスが明示的に含まれていないため)、ここでも同じキャプチャがトリガーされると考えられます。

全体像を把握するために、正直言って、いつからこの問題が発生し始めたのかは覚えていません。数週間前、この VBA IDE 機能が再び必要になったときに初めて気づきました。デフォルトの Windows Defender と一緒に Sandboxie v5.18 をインストールしています。すべてのソフトウェアはパッチが適用され、最新の状態です。それ以外に、侵入的なセキュリティ ソフトウェアはインストールされていません。Sandboxie サービスと Windows Defender をオフにしても効果はなく、Windows をセーフ モードで実行しても効果はありませんでした。

何が起こっているのか誰か分かるでしょうか?

この問題の解決に関心のある方や、解決方法が必要な方のために、背景情報を説明します。私は Office 2010 Professional 32 ビット版を使用していますが、VBA IDE のバグに遭遇し、IDE でフォームを設計するときにツールボックスにコントロールを追加できなくなりました。[追加のコントロール] は (メニューからも、ツールボックス自体のポップアップ コンテキスト メニューからも) 一日中選択できますが、カーソルがフォームを変更する瞬間以外は何も起こりません。[追加のコントロール] ダイアログ ボックスはまったく開かず、エラーも表示されません。この問題が発生する理由は、レジストリを反復処理して「コントロール」タイプの CLSID を検索するときに、レジストリ キーの読み取り時に「アクセス拒否」エラーが発生すると、VBA IDE が実行中の処理を中止してしまうためです。プロセス モニターを使用すると、どのキーがアクセス許可エラーを引き起こしたかがわかり、設定されたアクセス許可を修正すると、VBA が再び正常に動作します。残念ながら、このバグはこれまで長い間存在しており、それほど頻繁に発生するわけではありませんが、私の意見では、まだ修正されていない悪い設計です。

関連情報