Files
win-troubleshooting-notes-p…/ori-wotw-troubleshooting/补丁包/ori-wwise-affinity-fix-v1.0.0/README.zh-CN.md
T

95 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ori Wwise Affinity Fix v1.0.0
针对《奥日 2:精灵与萤火意志》一个特定 Wwise DLL 构建的非官方兼容补丁。
本机定位到的触发链:音频读取线程的 `SetThreadAffinityMask` 失败(错误 87),初始化失败后的句柄清理与存活线程形成危险时序,随后访问冲突。补丁让通过指定 setter 配置的音频线程使用 Windows 默认调度,避开这条失败路径。
## 适用范围
同时参考故障表现、Wwise streaming I/O 初始化报错、音频工作线程崩溃,以及下面的完整文件哈希。`0xC0000005` 本身不足以判断适用。
原始目标文件:游戏目录下 `oriwotw_Data\Plugins\AkSoundEngine.dll`。
```text
大小:2,719,232 字节
原始 SHA-256:
8F90A4A3856540CB97D03CA07B4BB10B7A08F7B4AB3C524BE2BEC1AFDD29FECA
补丁后 SHA-256:
62B2079A988D23EB251D4E83366AC04068A6F47E0D38EFE92A76DF022826F9F0
```
SDK 字符串相同不代表 DLL 完全相同。安装器会拒绝未知版本,不提供绕过哈希限制的选项。
## 安装
要求 Windows x64 和 PowerShell 7;本包不安装或升级任何软件。
1. 解压整个压缩包。
2. 正常退出所有奥日 2 进程。
3. 双击 `Install.cmd`。
4. 按提示输入包含 `oriwotw.exe` 的游戏根目录。
5. 成功后直接使用原来的游戏入口启动。
文件夹没有写入权限时,脚本会报错;在确认目录正确后,可以由用户在具备该目录写入权限的 PowerShell 7 中执行。脚本不会自行获取管理员权限。
命令行方式:在本包解压目录打开 PowerShell 7,替换下面的示例游戏路径。
```powershell
& '.\Ori-AudioFix.ps1' -Action Check -GameDirectory 'D:\Games\Ori and the Will of the Wisps'
& '.\Ori-AudioFix.ps1' -Action Install -GameDirectory 'D:\Games\Ori and the Will of the Wisps'
```
默认动作是 `Check`,只检查。分享版要求明确提供游戏目录,不采用研究机器上的默认路径。
## 还原
退出游戏后双击 `Restore.cmd`,输入同一个游戏目录。也可以执行:
```powershell
& '.\Ori-AudioFix.ps1' -Action Restore -GameDirectory 'D:\Games\Ori and the Will of the Wisps'
```
原文件保留在 DLL 旁边的 `AkSoundEngine.dll.before-ori-affinity-fix`,还原前后都会验证哈希。不要删除该备份。
游戏更新或平台校验可能恢复原文件。若 DLL 已变为新版本,应重新研究兼容性,不要强行套用本补丁。
## 修改原理
目标:`CSharp_AkThreadProperties_dwAffinityMask_set`。保留空指针检查,把它写入的亲和性值改为 0。此 DLL 本身会在掩码为 0 时跳过显式核心绑定。
```text
函数 RVA:0x121F0
文件偏移:0x115F0
校验区域:16 字节;实际变化:8 字节
原始:48 85 C9 74 03 89 51 04 C3 CC CC CC CC CC CC CC
补丁:48 85 C9 74 07 C7 41 04 00 00 00 00 C3 CC CC CC
```
这个 0 表示使用 DLL 已有的“不显式绑定”路径,不是向 Windows 请求零个可用核心。补丁不关闭音频,不修改系统全局调度或游戏平台授权接口。
未知哈希、原始指令不符、备份不符或游戏仍在运行时,安装器会停止。多个目录之间不构成整体事务,请逐条检查输出;每份原文件都单独保留备份。
## 验证范围
已在一台 Windows 10 22H2 主机上完成:原始故障跟踪、截断掩码的失败对照、取消绑定后的临时验证、安装后的普通启动和非零音频信号检查。用户确认最后一次普通启动为主动退出。
主测版本 Unity 2018.4.11f1 / Build Id 5257;另一份 Unity 2018.4.24f1 / Build Id 8978 具有相同音频 DLL,已完成安装校验,本轮未单独运行验证。尚无大规模成功率、长时间稳定性或性能结论。
为什么该游戏线程的绑定被拒绝仍未完全查明;这里提供的是有对照实验支持的兼容方案。完整证据层级、限制和微软文档引用见 `RESEARCH.zh-CN.md`。
## 文件清单
- `Ori-AudioFix.ps1`:核心检查、安装和还原逻辑。
- `Interactive.ps1`、`Install.cmd`、`Restore.cmd`:交互入口。
- `RESEARCH.zh-CN.md`:技术报告。
- `COMMUNITY-REVIEW.zh-CN.md`:网络排障方案的来源、适用条件,以及限制核心与本补丁的区别。
- `environment.json`:相关系统、硬件与驱动信息,不含序列号和账号。
- `EVIDENCE.json`:脱敏后的实验结论摘要。
- `SHA256SUMS.txt`:包内文件校验值;另有压缩包外部 SHA-256 文件。
压缩包不含游戏 DLL、完整游戏、原始转储、原始日志或用户存档。报告中的本地原始证据索引用于说明研究来源,不代表这些原始文件随包分发。
反馈建议包含系统构建、CPU 标识与逻辑处理器数、原始 DLL 哈希、关键错误和测试时长。请先移除个人路径,不要在公开评论中上传完整内存转储。