Wine Gecko 集成与运行修复总结
Wine Gecko 集成与运行修复总结概述本文档记录了让 ReactOS 加载 Wine Geckoxul.dll所需的全部修改。Wine Gecko 是 MSHTMLInternet Explorer 核心用于渲染 HTML 内容的引擎加载失败会导致浏览器无法显示网页。核心加载路径mshtml.dll 加载时 (DLL_PROCESS_ATTACH) └─ load_gecko() [nsembed.c:742] └─ load_wine_gecko() [nsembed.c:583] ├─ RegOpenKey(HKLM\Software\Wine\MSHTML) ├─ RegOpenKey(2.40) ← 子键 ├─ RegQueryValueExW(GeckoPath) → %SystemRoot%\wine_gecko ├─ ExpandEnvironmentStringsW → C:\ReactOS\wine_gecko [★ 修复1] ├─ check_version() → 验证 VERSION 文件 [★ 修复2] └─ load_xul() → LoadLibraryExW(xul.dll) [★ 修复3,4]修改清单涉及5 个源文件和1 个构建文件共 6 处修改。修复 1mshtml 读取注册表路径未展开 %SystemRoot%文件dll/win32/mshtml/nsembed.c问题load_wine_gecko_v()使用RegQueryValueExW读取 GeckoPath只允许REG_SZ类型且不展开%SystemRoot%。注册表中存储的是%SystemRoot%\wine_gecko但代码直接把它传给CreateFileW和LoadLibraryExW导致路径错误。修复第 571-587 行resRegQueryValueExW(hkey,wszGeckoPath,NULL,type,(LPBYTE)gre_path,size);if(res!ERROR_SUCCESS)returnFALSE;if(typeREG_EXPAND_SZ){PRUnichar expanded_path[MAX_PATH];DWORD expanded_lenExpandEnvironmentStringsW(gre_path,expanded_path,MAX_PATH);if(expanded_len0||expanded_lenMAX_PATH)returnFALSE;strcpyW(gre_path,expanded_path);}elseif(type!REG_SZ){returnFALSE;}支持REG_SZ和REG_EXPAND_SZ两种类型并展开%SystemRoot%。修复 2注册表 GeckoPath 设为 REG_EXPAND_SZ文件boot/bootdata/hivedef.inf问题第 1999 行GeckoPath使用默认的REG_SZ空 flags 字段而路径中含环境变量%SystemRoot%需要标记为REG_EXPAND_SZ才能被识别。修复第 1999 行; 原: HKLM,SOFTWARE\Wine\MSHTML\2.40,GeckoPath,,%SystemRoot%\wine_gecko ; 改: HKLM,SOFTWARE\Wine\MSHTML\2.40,GeckoPath,0x00020000,%SystemRoot%\wine_gecko0x00020000FLG_ADDREG_TYPE_EXPAND_SZREG_EXPAND_SZ。修复 3msvcrt.dll 缺少 xul.dll 所需的 CRT 导出函数文件dll/win32/msvcrt/msvcrt.spec问题Wine Gecko 的 xul.dll 是用 MinGW 编译的导入多个 Microsoft 安全 CRT 函数如__snwprintf_s、_snwprintf_s、_wcslwr_s等。这些函数在 msvcrt.spec 中被-version0x600限制只对 Vista 导出。ReactOS 以--version0x502(WinXP) 构建 msvcrt.dll因此这些函数不在导出表中。修复 A——添加 MinGW 双下划线别名第 930 行 varargs _snwprintf_s(ptr long long wstr) varargs __snwprintf_s(ptr long long wstr) _snwprintf_s ← 新增别名__snwprintf_s转发到_snwprintf_s。修复 B——去掉所有-version0x600版本限制# 去掉 spec 文件中所有 -version0x600 约束(Get-Contentmsvcrt.spec)-replace-version0x600\ ,-replace-version0x600\,涉及约 180 个函数包括_snwprintf_s、_wcslwr_s、_snprintf_s、strcpy_s、wcscpy_s、memcpy_s、fopen_s等全部安全 CRT 函数。修复 4kernel32.dll 缺少 GetSystemTimePreciseAsFileTime文件dll/win32/kernel32/client/time.c问题xul.dll 调用GetSystemTimePreciseAsFileTime该函数在 ReactOS 中只有STUB;空实现导致 xul.dll 加载失败c0000139。修复第 141-153 行VOID WINAPIGetSystemTimePreciseAsFileTime(OUT PFILETIME lpFileTime){LARGE_INTEGER SystemTime;NtQuerySystemTime(SystemTime);lpFileTime-dwLowDateTimeSystemTime.u.LowPart;lpFileTime-dwHighDateTimeSystemTime.u.HighPart;}NtQuerySystemTime和FILETIME使用相同的格式1601 年以来的 100ns 间隔直接赋值即可。修复 5构建系统将 wine_gecko 放入 ISO文件modules/CMakeLists.txt问题wine_gecko 文件通过add_cd_file(FOR bootcd)进入reactos.cab但安装程序 (USETUP) 不会自动提取 CAB 中所有文件到目标系统导致安装后%SystemRoot%\wine_gecko\目录缺失。修复第 53-81 行改用NO_CAB文件直接放在 ISO 的i386/wine_gecko/路径下在txtsetup.sif中添加目录 ID 和文件条目安装时由 USETUP 自动复制到%SystemRoot%\wine_gecko\add_cd_file(FILE .../wine_gecko/xul.dll DESTINATION reactos/wine_gecko NAME_ON_CD xul.dll NO_CAB ← 关键不打包进 CAB FOR bootcd livecd regtest)修复 6txtsetup.sif 添加 wine_gecko 文件复制规则文件boot/bootdata/txtsetup.sif问题安装程序不知道 wine_gecko 文件需要复制到目标系统。修复 A——添加目录 ID 映射第 41-45 行[Directories] 82 wine_gecko 88 wine_gecko\dictionaries 89 wine_gecko\gmp-clearkey\0.1 90 wine_gecko\gmp-fake\1.0 91 wine_gecko\gmp-fakeopenh264\1.0修复 B——添加 27 条文件条目第 145-171 行[SourceDisksFiles] ; Wine Gecko 根目录文件 (目标目录 82) xul.dll 1,wine_gecko,,,,,,82,,,,1,82 VERSION 1,wine_gecko,,,,,,82,,,,1,82 omni.ja 1,wine_gecko,,,,,,82,,,,1,82 freebl3.dll 1,wine_gecko,,,,,,82,,,,1,82 mozglue.dll 1,wine_gecko,,,,,,82,,,,1,82 nss3.dll 1,wine_gecko,,,,,,82,,,,1,82 ... ; 字典文件 (目标目录 88) en-US.aff 1,wine_gecko\dictionaries,,,,,,88,,,,1,88 en-US.dic 1,wine_gecko\dictionaries,,,,,,88,,,,1,88 ; GMP 插件 (目标目录 89-91) clearkey.dll 1,wine_gecko\gmp-clearkey\0.1,,,,,,89,,,,1,89 ...涉及文件完整列表#文件修改类型说明1dll/win32/mshtml/nsembed.c修复展开%SystemRoot%支持 REG_EXPAND_SZ2boot/bootdata/hivedef.inf修复GeckoPath 改为 REG_EXPAND_SZ3dll/win32/msvcrt/msvcrt.spec修复去掉全部-version0x600约束 添加__snwprintf_s别名4dll/win32/kernel32/client/time.c实现GetSystemTimePreciseAsFileTime5modules/CMakeLists.txt修复wine_gecko 改用 NO_CAB6boot/bootdata/txtsetup.sif修复添加目录 ID 和文件复制条目构建与测试# 1. 配置 CMake确保 wine_gecko 文件被 GLOB 识别cd D:\reactos cmake-G Ninja-DCMAKE_TOOLCHAIN_FILEtoolchain-mingw32.cmake-DARCHi386-S.-B output-MinGW-i386# 2. 构建ninja-C output-MinGW-i386-j 20 bootcd# 3. 输出文件# output-MinGW-i386/bootcd.iso ← 新 ISO含 wine_gecko# output-MinGW-i386/dll/ntdll/ntdll.dll ← 新 ntdll去掉 LDR 日志# output-MinGW-i386/dll/win32/kernel32/kernel32.dll ← 新 kernel32# output-MinGW-i386/dll/win32/msvcrt/msvcrt.dll ← 新 msvcrt# 4. 不重装的快速测试需要 PE 启动盘复制:copyoutput-MinGW-i386\dll\ntdll\ntdll.dll C:\ReactOS\system32\copyoutput-MinGW-i386\dll\win32\kernel32\kernel32.dll C:\ReactOS\system32\copyoutput-MinGW-i386\dll\win32\msvcrt\msvcrt.dll C:\ReactOS\system32\ md C:\ReactOS\wine_gecko xcopy/E D:\reactos\modules\optional\wine_gecko\*.*C:\ReactOS\wine_gecko\调试日志说明日志内容含义对应阶段Could not open VERSION fileVERSION 文件未找到check_versionCould not load XUL: %dxul.dll 加载失败依赖缺失load_xulUnexpected version %sVERSION 文件内容不匹配check_versionxul.dll failing with c0000139缺少 CRT 导出函数LoadLibraryExWCould not load wine-gecko以上任一阶段失败load_geckoFailed to init Gecko, returning CLASS_E_CLASSNOTAVAILABLEGecko 初始化失败init_xpcom

相关新闻

人形机器人工业落地准入指南:认证标准、硬核能力与产线适配

人形机器人工业落地准入指南:认证标准、硬核能力与产线适配

1. 项目概述:这不是玩具,是正在落地的“新工种”载体最近在几个工业自动化展会现场,我连续三天被同一个问题围住:“老师,这台人形机器人,能进我们产线替人拧螺丝吗?”问的人有汽车厂的班组长、电…

2026/7/24 3:55:50 阅读更多 →
人形机器人续航瓶颈:系统级能耗优化实战指南

人形机器人续航瓶颈:系统级能耗优化实战指南

1. 为什么人形机器人一走动就“电量告急”?不是电池小,是系统在烧电“人形机器人续航只有47分钟”——这条消息去年在某科技展上被现场观众拍下视频传开后,评论区清一色是“还不如我家扫地机”。但真正做过本体控制开发的工程师看到这个数字&…

2026/7/24 7:39:32 阅读更多 →
自动驾驶端到端研发范式切分:从黑箱训练到白盒演进

自动驾驶端到端研发范式切分:从黑箱训练到白盒演进

1. 项目概述:为什么“端到端算法研发范式切分”是当前自动驾驶落地的关键卡点“自动驾驶端到端 算法研发范式切分”这个标题乍看像一句技术黑话,但拆开来看,它直指行业最真实、最紧迫的工程矛盾——不是模型能不能跑通,而是研发流…

2026/7/24 5:24:26 阅读更多 →

最新新闻

工业AI运维系统:Claude 3.5 Sonnet在火电厂的应用实践

工业AI运维系统:Claude 3.5 Sonnet在火电厂的应用实践

1. 项目概述:当工业运维遇上AI思维链 在火电厂控制室里,闪烁的DCS屏幕上跳动着上千个测点数据。主控台前的运行员需要同时监控汽轮机振动、锅炉燃烧效率、发电机负荷等关键参数,任何异常都可能引发连锁反应。我曾亲眼目睹一次汽包水位异常处理…

2026/7/24 8:00:39 阅读更多 →
C++构建高性能电商推荐系统:架构、实现与性能优化实战

C++构建高性能电商推荐系统:架构、实现与性能优化实战

1. 项目概述与核心价值最近在整理过往的项目经验,发现一个挺有意思的案例,就是几年前为一个宠物用品电商平台做的智能推荐系统。当时团队决定用C来构建核心引擎,这个选择在今天看来依然有很多值得探讨的地方。很多人一提到推荐系统&#xff0…

2026/7/24 8:00:39 阅读更多 →
服装店收银系统真实测评:从4小时人工苦战到10分钟高效入库!

服装店收银系统真实测评:从4小时人工苦战到10分钟高效入库!

摘要:一家90平米的童装童鞋实体店,长期受困于款式多、尺码颜色杂导致的入库慢(单次4小时)、库存错乱(月均差错30件)及盘点压力大等传统手工管理顽疾。引入日进斗金服装收银系统后,通过AI智能入库…

2026/7/24 8:00:39 阅读更多 →
注意力机制与Transformer架构核心技术解析

注意力机制与Transformer架构核心技术解析

1. 注意力机制的本质与核心思想注意力机制(Attention Mechanism)本质上是一种动态权重分配机制,它模拟了人类认知过程中的选择性关注特性。想象你在阅读一段文字时,大脑会自然地聚焦于当前最相关的词汇和上下文信息,而…

2026/7/24 8:00:39 阅读更多 →
深度学习中的注意力机制原理与实现详解

深度学习中的注意力机制原理与实现详解

1. 注意力机制基础与核心原理注意力机制(Attention Mechanism)是当代深度学习领域最具革命性的创新之一,它彻底改变了序列建模的传统范式。要理解其精髓,我们可以从人类阅读行为进行类比:当我们阅读一段文字时&#xf…

2026/7/24 8:00:39 阅读更多 →
Unity 2022 LTS下GameFramework资源模块实战:异步加载与内存管理

Unity 2022 LTS下GameFramework资源模块实战:异步加载与内存管理

1. 项目概述:告别手动管理的低效时代 如果你还在Unity项目里用 Resources.Load 、 AssetBundle.LoadFromFile 或者自己写协程和回调来管理资源加载,那真的有点“原始人钻木取火”的味道了。尤其是在Unity 2022 LTS这个新版本下,引擎本身对…

2026/7/24 7:59:39 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻