唉西八,之前發過一個類似的貼,講了AMD之前的AE因為音訊管線冷啟動導致錄製失效的事,沒想到更新到最新驅動之後又出事了。搞不懂超級小蘇一天天的到底在幹嘛,每次發驅動老bug不修就搞點沒人玩的遊戲適配。我看是阿三爽吃蘇大炮白飯。
回到正題,最新AE版本26.9.2,和驅動本體無關,純AE元件的bug。
核心原因:DVR元件自己準備了幀內緩衝區 ~528 位元組總大小 1024 位元組但每次申請填的表是請求 1040 位元組,Windows在溢位時直接判越界拒絕響應了。這個故障還是有的人有有的人沒有,因為每個人的棧水位不一樣,只有棧水位使緩衝區距棧頂 < 1040 位元組的情況下會觸發故障,表現為點錄製按鈕像失效了一樣什麼事也不會發生。
原理:場景轉換路徑透過 EnumWindows 列舉視窗、以 GetClassNameW 讀取各視窗類名來查詢 CNEventWindowClass。該呼叫使用 nMaxCount = 520(0x208,1040 位元組),而當前執行緒棧可用空間僅 1024 位元組時,請求範圍越出棧頂 16 位元組,導致 Windows 對整段範圍校驗失敗並返回 ERROR_NOACCESS (998),所有視窗類名均讀取失敗 → 找不到目標視窗 → 場景轉換被靜默放棄。
省流結束,開始小故事環節:
一開始讓嘎啦嘛和肥魚兩邊分頭查原因,兩邊都查不出來,只停到能確定DVR日誌裡有Failed to send scene conversion to CN是核心故障的表現,至於這個記錄從哪來的壓根查不出來。而這個關鍵詞AMD社群壓根0命中,搜錄製功能故障到是動不動就有人在發,AMD每次回貼子就純擺爛:DDU(明明官方有更安全更好的AMD解除安裝工具結果社群官方還在推DDU,真沒繃住)、關 HDCP、更新驅動。帖子就這樣沉了。
最關鍵的是沒人能準確描述自己故障出在哪,因為這玩意壓根不報錯,沒有錯誤碼,也不崩潰,僅僅只是靜默失敗,而且DVRlog的開關預設是關的,給普通使用者的感受就是這個按鈕按不動了,僅此而已。又因為AMD自己的環境不觸發這個故障,兩邊對不上,就一直滾刀。
後來找GPT討論思路,肥龍靈光一閃下載了一份windbg去分析報錯,然後開始反彙編DVR元件,抓到了關鍵點 - 緩衝棧,然後就沒額度了。笑死。肥龍在後端這一塊權威是權威,額度是真的燒的快。

讓DeepSeek順著GPT的思路繼續往下修,確定了就是緩衝的問題,於是開始手搓補丁。
工具倉庫:github.com/ShirasawaYui/amd-dvr-toolkit
歡迎大家下載使用,但需要強調幾點:
1:不保證一定能修好。縮小緩衝不一定能對每個人都有效,只是緩解了這個故障的症狀。理論覆蓋率超95%。
2:程式碼是肥魚寫的,神鬼二項性請注意。我自己試著用過了,我的環境裡能修好。
3:補丁版會動AMD驅動簽名,而且還會被更新覆蓋,可能會被殺軟多看兩眼;解卡指令碼需要每次故障發生後手動跑一次,不改AMD程式本身。按需自取。
4:詳細故障報告已經發AMD了,至於修不修,什麼時候修,只能算一卦。不急可以不用我的工具。

我說手裡捏點GPT便宜套餐真有用吧,Astra大人真幹活啊。
最後請多多支援ROCm生態,支援千問喵,支援本地千問小模型謝謝喵你問我千問幹了什麼?千問畫了這份漫畫(什麼史官