亂改注冊表項權限導致的事件查看器“錯誤31:連到系統(tǒng)上的設備沒有發(fā)揮作用”問題分析
最近弄了個auto uninstaller工具篡改注冊表權限問題的修復工具。
auto uninstaller將所有其記錄的注冊表項權限改成:everyone讀取、管理員組讀取、system完全控制。
我一開始制作的批處理版修復權限工具,是把上面權限的管理員組改成完全控制,但是考慮到比正常注冊表好像缺少了不少用戶權限,感覺可能會有問題,于是制作了exe版的。出于偷懶,我直接獲取了根注冊表項HKEY_CURRENT_USER(2月26日新版本改成HKEY_USERS的),將其權限應用到問題注冊表。

然后今天某位打開過auto uninstaller的網友,在用修復工具修復后,成功安裝autocad2022,但是在打開時會無響應很長一段事件(已確認跟eventlog無法啟動有關)。我試圖打開事件查看器看有沒相關錯誤,卻提示服務沒啟動,試圖啟動服務就遇到了本文的問題:
Windows 無法啟動 Windows Event Log服務(位于 本地計算機 上)。
錯誤31:連接到系統(tǒng)上的設備沒有發(fā)揮作用。

用procmon設置過濾器路徑包含eventlog的,結果是access denied的:

發(fā)現啟動eventlog服務時,svchost.exe在訪問子項ACEEventLog(ATI顯卡催化劑相關項)遇到拒絕訪問。查看這個子項權限,根HKEY_CURRENT_USER一模一樣(修復工具導致)。
手動更改ACEEventLog權限,添加上users用戶組讀取權限時,eventlog能正常啟動了!
我一直以為HKEY_CURRENT_USER里的RESTRICTED權限,就相當于users的權限,結果不是。還需要額外添加users或everyone的讀取權限。
ACEEventLog并不是系統(tǒng)自帶的,是顯卡驅動創(chuàng)建的。一個非系統(tǒng)注冊表項的權限居然影響系統(tǒng)服務正常運行?
測試了下在eventlog里創(chuàng)建一個子項,刪除掉繼承的Authenticated Users,然后任務管理器找到eventlog服務對應的進程PID,結束掉,文章的錯誤又復現了。
總結:遇到類似“錯誤31:連到系統(tǒng)上的設備沒有發(fā)揮作用”這樣的疑難雜癥,不妨考慮下注冊表權限問題。權限有問題用procmon分析結果是access denied的。