升級新主機板 ASUS X670E HERO 後,安裝 Armoury Crate 遇上一堆問題。
搞了好久,最後自己寫了工具來清理 ASUS 所有軟體。
詳細內如請閱讀: 自製 ASUS 軟體清除工具分享
用了我的工具後,可以順利安裝 Armoury Crate。但是有個問題我自己沒法修復:
C:\Program Files\ASUS\ARMOURY CRATE Lite Service\MB_Home\MB_Home.dll
這個模組不斷的產生錯誤。
失敗的應用程式名稱: ArmouryCrate.Service.exe,版本: 5.4.4.0,時間戳記: 0x63ea1c60
失敗的模組名稱: MB_Home.dll,版本: 5.4.8.0,時間戳記: 0x63a41bd5
例外狀況代碼: 0xc0000409
錯誤位移: 0x00000000000403a9
失敗的處理程序識別碼: 0x0xB514
失敗的應用程式開始時間: 0x0x1D96C2BC05CFE1F
失敗的應用程式路徑: C:\Program Files\ASUS\ARMOURY CRATE Lite Service\ArmouryCrate.Service.exe
失敗的模組路徑: C:\Program Files\ASUS\ARMOURY CRATE Lite Service\MB_Home\MB_Home.dll
用WinDbg跑了一下,0xc0000409 ("堆疊緩衝區溢出")
這個DLL在我的系統產生了 stack overflow。我自己沒法除錯。因此只能求助官方支持。
這個顯然是軟體設計上的錯誤,產生了沒預期的軟體設計狀況。
建議是不是用 SEH (Structured Exception Handling) 或是 改善設計軟體設計來避免產生錯誤。
目前我只能暫時把改模組移除來避免 ArmouryCrate.Service.exe 服務崩潰。
BIOS: ROG CROSSHAIR X670E HERO BIOS 1004
BIOS 設定多數都是預設值。 RAM 頻率設定過 DEFAULT 3600 或是 目前的5000 但不影響結果。
BIOS 設定多數都是預設值: Tool 中,Armoury Crate 與 MyASUS 目前都是預設關閉 (避免APP STORE安裝)
Armoury Crate 由官方下載的。主機板的支援PAGE。也用過多次
Armoury Crate Uninstall Tool 目前特別效果。
等等會測試看看 昨天新推出的看看沒否改善:
Armoury Crate & Aura Creator Installer 版本 3.2.6.
測試了 Armoury Crate & Aura Creator Installer 版本 3.2.6. (先執行 Armoury Crate Uninstall Tool 清除後安裝)
結果非常糟糕。沒想到原本ARGB周邊能工作,龍神的 AniMeMatrix 也沒問題的。用了新版的完全不能工作了。而且只剩下主機板上的ARGB能夠被偵測到。
更嚴重的是用了新版的 Armoury Crate & Aura Creator Installer 後,
Armoury Crate Uninstall Tool V2.1.11.0 變得無法正常執行了。執行到一半,就要擋掉。(測試了好多回都是如此)
EventViewer Log,
現在最尷尬的地方是好多反安裝到一半的程式殘留。想要再重新安裝也無法正常進行。
最後。我只好改寫我的清除工具來取代 Armoury Crate Uninstall Tool
ASUS Software Clean Up Tool (github.com)
反安裝以下程式:
最後,清除所有華碩的機碼與目錄
===========================================================
最後我在執行前一版的
ArmouryCrateInstaller_3.2.5.2
一切又能安裝了。但是原本回報的問題也還在。但是ARGB與AniMeMatrix 又再度能工作了。
這個MB_Home還是會Crash。
C:\Program Files\ASUS\ARMOURY CRATE Lite Service\MB_Home\MB_Home.dll
更新後 Armoury Crate UWP後:
ArmouryCrate.Service.exe,的檔案版本依然是: 5.4.4.0
我感覺我在除錯上花了我太多時間了。
你好,數日未收到您的回信。我自己做了一些研究。來找出問題。
以下是我用 Debugger 跑出來的結果。(已經私訊)
[32] Device class: HDD, Name: HDD 26 Sensors: 3
>>> cpu: 0x0, type: 0x0, class: 0xE, id: 0x0
>>> 6, 0, 84.759087
>>> cpu: 0x0, type: 0x0, class: 0x10, id: 0x0
>>> 6, 3, 0.006250
Exception thrown at 0x00007FFC3BF1C11F (MB_Home.dll) in ArmouryCrate.Service.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
Unhandled exception at 0x00007FFC3BF503A9 (MB_Home.dll) in ArmouryCrate.Service.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.
Unhandled exception at 0x00007FFC3BF503A9 (MB_Home.dll) in ArmouryCrate.Service.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.
Unhandled exception at 0x00007FFC3BF503A9 (MB_Home.dll) in ArmouryCrate.Service.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.
STATUS_STACK_BUFFER_OVERRUN encountered
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in ArmouryCrate.Service.exe.
Exception thrown at 0x00007FFDAF89BE19 (ntdll.dll) in ArmouryCrate.Service.exe: 0xC0000374: 堆積已損毀。 (parameters: 0x00007FFDAF911860).
Unhandled exception at 0x00007FFDAF89BE19 (ntdll.dll) in ArmouryCrate.Service.exe: 0xC0000374: 堆積已損毀。 (parameters: 0x00007FFDAF911860).
=============================================================================================
ArmouryCrate.Service.exe 在列舉硬體的第32個之後,就會發生Stack Overrun的錯誤。
這個原因依該是列舉的裝置數量超出自己能存放的空間,最終導致程式崩潰。
=============================================================================================
要修正這個問題,必須補上列舉的上限限制。
這個原因是在於程式設計考慮不知周詳與設計上每有仔細UnitTest或是壓力測試每個Function造成。
您好,
數日以來都未能獲得回應。我自行跑了DEBUGGER來協助釐清問題。
ArmouryCrate.Service.exe 是基於 vcruntime140_1.dll 開發的 Native 與 DOTNET Managed Code 混和模式
C:\Program Files\ASUS\ARMOURY CRATE Lite Service\vcruntime140_1.dll'.
Exception thrown at 0x00007FFDACCFFDEC (KernelBase.dll) in ArmouryCrate.Service.exe: 0x00000005: 存取被拒。.
'ArmouryCrate.Service.exe' (Win32): Loaded 'C:\Program Files\ASUS\ARMOURY CRATE Lite Service\MB_Home\OPHWInfo.dll'.
'ArmouryCrate.Service.exe' (Win32): Unloaded 'C:\Program Files\ASUS\ARMOURY CRATE Lite Service\MB_Home\OPHWInfo.dll'
The thread 0x106e0 has exited with code 0 (0x0).
Exception thrown at 0x00007FFDACCFFDEC in ArmouryCrate.Service.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x000000A32E0FBEF0.
Exception thrown at 0x00007FFDACCFFDEC in ArmouryCrate.Service.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000000000000000.
Exception thrown at 0x00007FFDACCFFDEC in ArmouryCrate.Service.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x000000A32E0FBEF0.
'ArmouryCrate.Service.exe' (Win32): Loaded 'C:\Program Files\ASUS\ARMOURY CRATE Lite Service\ScenarioProfilePlugin\ConfigXML_ScenarioProfile.dll'.
[0] Device class: Mainboard, Name: ASUSTeK COMPUTER INC. ROG CROSSHAIR X670E HERO Sensors: 1
>>> cpu: 0x0, type: 0x7, class: 0xE, id: 0x0
>>> 0, 0, 44.000000
[1] Device class: Processor, Name: AMD Ryzen 9 7950X Sensors: 89
>>> cpu: 0x0, type: 0xF, class: 0x1, id: 0x0
....
[32] Device class: HDD, Name: HDD 26 Sensors: 3
>>> cpu: 0x0, type: 0x0, class: 0xE, id: 0x0
>>> 6, 0, 84.759087
>>> cpu: 0x0, type: 0x0, class: 0x10, id: 0x0
>>> 6, 3, 0.006250
Exception thrown at 0x00007FFC3BF1C11F (MB_Home.dll) in ArmouryCrate.Service.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
Unhandled exception at 0x00007FFC3BF503A9 (MB_Home.dll) in ArmouryCrate.Service.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.
貴公司的服務每次在 MB_Home.dll 列舉硬體最後都會引發 stack overrun
如果我選擇在debugger中繞過這個堆疊過載,則會引發別的錯誤。
STATUS_STACK_BUFFER_OVERRUN encountered
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in ArmouryCrate.Service.exe.
Exception thrown at 0x00007FFDAF89BE19 (ntdll.dll) in ArmouryCrate.Service.exe: 0xC0000374: 堆積已損毀。 (parameters: 0x00007FFDAF911860).
Unhandled exception at 0x00007FFDAF89BE19 (ntdll.dll) in ArmouryCrate.Service.exe: 0xC0000374: 堆積已損毀。 (parameters: 0x00007FFDAF911860).
總之系統發現程式碼已經無法正常運行,堆疊已經回損。這可能程式碼產生了錯誤。加上貴公司的程式碼是Managed Code與Native Code混和。這些堆疊錯誤行為應該是在Native Code所引發的。而這些錯誤應該是能被避免的。如果在程式碼上可慮更多情況,或是寫作上更嚴謹。避免引數超過宣告的大小,或是給予程式更多嚴厲的壓力測試都能增加程式碼的穩定性。
我已經將詳細LOG私訊息給你們了。希望能獲得回應。
最後,不得不說ARMOURY CRATE功能強大,但是除非他能穩定運作,增加相容性。否則一切都是枉然。不可能老是依賴顧客反饋,或是要求顧客重新安裝系統等等。能夠工作與產出才是購買新設備的初衷,而不是讓一切搞得更困難。