唉西八,之前发过一个类似的贴,讲了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生态,支持千问喵,支持本地千问小模型谢谢喵你问我千问干了什么?千问画了这份漫画(什么史官