即使具有正確的權限,註冊表項存取也被拒絕

即使具有正確的權限,註冊表項存取也被拒絕

我正在運行 Windows 10 家用版 64 位元的全新安裝(僅幾天前),並且在訪問特定註冊表項時遇到問題。當 Office VBA 編輯器(我自己的受限用戶帳戶下的 32 位元進程)掃描註冊表以查找可用控制項時,它會命中{0002DF01-0000-0000-C000-000000000046}HKCR\CLSIDs 分支中的CLSID,並在以讀取模式開啟金鑰時收到拒絕訪問的信息,這會阻止它繼續。此金鑰僅存在於 HKLM 分支中,而不存在於 HKCU 分支中。查看它的預設值,它適用於「Internet Explorer(Ver 1.0)」。它有兩份;一個直接位於 Classes\CLSID 路徑中,另一個位於 32 位元進程的 Classes\WOW6432Node\CLSID 路徑中。由於這是 Office 32 位,我首先關注 WOW6432Node 版本。

到目前為止我的測試:

  • 該密鑰已具有我的用戶帳戶的讀取權限...什麼給出了?
  • 擁有者是 TrustedInstaller(為什麼是他?),而該金鑰的權限被明確覆蓋(即沒有像我懷疑的那樣繼承 - 為什麼?)
  • 我將所有者更改為管理員,並添加了具有完全權限的特定使用者帳戶。 RegEdit 的「有效存取」標籤確認該使用者擁有完全權限,但是當 VBA IDE(在相同使用者帳戶下執行)嘗試讀取它時,仍然會觸發存取被拒絕?
  • 我暫時重命名了該密鑰(例如,將第一個“0”替換為“1”)。根據 Process Monitor,VBA IDE 現在可以正常讀取重命名的金鑰 - 不再拒絕存取!將其重新命名回來又會產生舊的行為...
  • 考慮到這可能是相同金鑰的 32 位元和 64 位元「版本」之間的衝突,我嘗試對此金鑰的 64 位元版本執行相同的操作。結果:預設權限已經夠好了,將所有權設定為管理員可以工作,給予管理員完全控制權也可以,但不允許將 RegEdit 中的金鑰重新命名為 admin 嗎? RegEdit 拋出“重命名項錯誤 - 註冊表編輯器無法重命名 {0002DF01-0000-0000-C000-000000000046}。重命名項時出錯。” (哇,這是有用的信息!)使用 Process Monitor 顯示 RegEdit 的 RegRenameKey 操作也會導致此處的存取被拒絕。
  • 使用系統帳戶執行 RegEdit PsExec -s -i regedit.exe(透過工作管理員確認帳戶),它仍然無法重新命名金鑰。

看起來這本身並不是權限問題;看起來好像有其他進程正在透過名稱主動監視對此密鑰的存取並拒絕它?無論設定了正確的權限,管理員都無法重新命名該金鑰的 64 位元版本,並且嘗試讀取該金鑰的 32 位元版本的 32 位元進程也會被「存取拒絕」。我假設由於 32 位元進程查詢通用 Classes\CLSID... 路徑(即不像我的 RegEdit 重命名那樣明確地使用 WOW6432Node 路徑),這會在這裡觸發相同的捕獲。

總結一下:老實說,我不記得這件事是什麼時候開始發生的;幾週前,當我再次需要此 VBA IDE 功能時,我第一次注意到它。我安裝了 Sandboxie v5.18 和預設的 Windows Defender。所有軟體均已打補丁並且是最新的。除此之外,沒有安裝其他侵入性安全軟體。關閉 Sandboxie 服務和 Windows Defender 也沒有幫助,在安全模式下執行 Windows 也沒有幫助。

有人知道會發生什麼事嗎?

任何好奇和/或需要幫助解決此問題的人的上下文:我正在使用 Office 2010 professional 32 位,並且我遇到了 VBA IDE 錯誤,該錯誤導致在設計表單時無法向工具箱添加其他控制項在 IDE 中。我可以整天選擇“附加控制”(從選單以及工具箱本身的彈出上下文選單),但除了遊標改變形式的短暫閃爍之外,什麼也沒有發生 - 沒有“附加控制”對話框無論如何打開,沒有顯示任何錯誤,什麼都沒有。發生這種情況的原因是,當循環存取註冊表以搜尋「控制」類型 CLSID 時,VBA IDE 在讀取註冊表項時遇到「存取被拒絕」錯誤時就會退出正在執行的操作。使用進程監視器,您可以找到哪個鍵觸發了權限錯誤,並且更正設定的權限使 VBA 再次滿意。不幸的是,這個錯誤已經存在很長時間了,雖然不經常遇到,但在我看來,它仍然是糟糕的設計,尚未修復。

相關內容