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

相关新闻

电子证件照片制作全教程:手机免费操作、微信支付宝流程、标准尺寸底色大全

电子证件照片制作全教程:手机免费操作、微信支付宝流程、标准尺寸底色大全

2026年各类线上报名、证件办理、入职存档、签证申请等场景,均需要合规的电子证件照。很多人常因尺寸不符、底色错误、画质模糊、文件大小超标导致上传审核失败。本文整理全套手机免费制作方法,涵盖微信、支付宝主流操作流程,明确通用标准尺寸…

2026/7/18 0:00:14阅读更多 →
揭秘!24小时AI客服领域,究竟哪家才是优秀服务商?

揭秘!24小时AI客服领域,究竟哪家才是优秀服务商?

在当今数字化时代,24小时AI客服成为众多企业提升服务水平与效率的重要工具,它能为企业实现全天候客户接待,带来更好的客户体验。那么,该领域有哪些优秀服务商呢?行业背景与痛点随着市场对客服服务要求的提升&#xff0…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
AI Agent技术解析与商业应用实践

AI Agent技术解析与商业应用实践

1. 项目概述:AI Agent技术正在重塑职场生态最近半年,科技圈最火的概念莫过于"AI Agent"。这个源自强化学习领域的技术名词,正在以惊人的速度渗透到商业实践中。作为在AI行业摸爬滚打十年的从业者,我亲眼见证了这项技术从…

2026/7/18 1:20:27阅读更多 →
Python continue语句详解:循环控制与数据过滤技巧

Python continue语句详解:循环控制与数据过滤技巧

1. 图解Python continue语句:循环中的"跳过卡"在Python编程中,循环控制就像交通信号灯,而continue语句就是那个让你在特定条件下"跳过当前路口"的特殊通行证。当你在处理一个包含100个元素的列表,但需要跳过其…

2026/7/18 1:20:27阅读更多 →
Koa与Express框架核心差异与选型指南

Koa与Express框架核心差异与选型指南

1. 框架背景与设计哲学差异Koa和Express虽然出自同一团队之手,但它们的诞生背景和设计理念有着本质区别。Express最早发布于2010年,是Node.js生态中首个成熟的Web框架,它的设计反映了当时JavaScript的语言特性——基于回调的异步处理机制。而…

2026/7/18 1:20:27阅读更多 →
通用Agent技术解析:Manus架构与工程实践

通用Agent技术解析:Manus架构与工程实践

1. Manus现象解析:通用Agent的潜力与局限最近在技术社区里,Manus这个通用Agent项目引发了广泛讨论。作为一个长期关注AI代理发展的从业者,我想从实际工程角度谈谈这个项目的独特之处。Manus之所以引起轰动,是因为它展示了一个Agen…

2026/7/18 1:20:27阅读更多 →
Express框架核心机制:app函数深度解析

Express框架核心机制:app函数深度解析

1. Express框架核心机制解析:app函数深度剖析作为Node.js生态中最流行的Web框架,Express的核心设计哲学体现在其简洁而强大的app函数上。这个看似简单的函数背后,隐藏着整个框架的运转机制。让我们从一个真实的开发场景开始:const…

2026/7/18 1:20:27阅读更多 →
电脑卡顿优化实战:3招提升系统性能

电脑卡顿优化实战:3招提升系统性能

1. 电脑卡顿的根源分析每次开机等待时间超过1分钟,打开浏览器要卡顿5秒以上,这种体验确实让人抓狂。作为一个经历过数十台电脑优化实战的老手,我发现90%的卡顿问题都源于以下三个核心因素:首先是启动项泛滥。很多软件安装时会默认…

2026/7/18 1:15:26阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/17 10:42:55阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/17 8:31:03阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/17 13:22:23阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/17 13:22:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →