本文主要是介绍OpenXP(Windows Server 2003 RTM,NT 5.2.3790.0)构建指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
OpenXP(Windows Server 2003 RTM,NT 5.2.3790.0)构建指南
版本 11,最后更新于 2023 年 10 月 1 日 Discord |
信使极客
注意 OpenXP(Windows Server 2003 RTM,NT 5.2.3790.0)构建指南 (rentry.co)
本指南将随时完成和升级,许多链接和参考资料可能会随时间而变化。
构建指南在 Windows XP、7 SP1、8.1 和 10 x86/x64 下测试,结果在其他操作系统下可能会有所不同(如果您要多次复制/粘贴源代码)。
- 构建准备
- 运行环境
- 建筑
- 干净的构建
- “肮脏”的构建
- 构建后
- 构建后问题
- 创建可引导的 ISO 文件
- 故障 排除
- 证书导入向导:发生内部错误...
- 运行 razzle 后,它显示一堆错误,“无法识别 tfindcer”等
- 在构建过程中,我收到 directui.lib(parse.obj) LNK2011 错误,提到预编译对象未链接
- 完整构建后,我收到 1000+ 错误,build.err 内部有错误的存储类错误
- 我得到一个 TAPI。生成期间出现 RES 错误。
- 在 Windows 7 上,我在构建时遇到 NTVDM 崩溃
- 调试
- VMware 设置
- 调试设置/安装
- 更改默认波特率
- 取消过滤内核消息
- 其他信息
- 预修补的 .zip 添加列表
- x64 生成 OS 支持
- amd64 构建支持
- 定时炸弹
- 不同的构建选项
- “OfficialBuild”参数 / BuildMachines.txt
- 创建新的构建后配置
- 构建特定组件
- 生成新的内部版本号/名称
- 原始 CD 文件名
- 产品密钥
- 更改日志
- V10版本
- V9 版
- V8版本
- 版本7
构建准备
- 建议在提取/构建之前禁用任何 AV,因为这两个操作都会创建大量新文件(您的 AV 可能会尝试扫描每个文件,从而减慢提取/构建速度) - 这也适用于任何其他监控文件的工具,例如 voidtools 的 Everything。
- 将源树提取到驱动器根目录上命名的文件夹(重要,因为预构建的DirectUI文件只会在此路径下正确链接,问题将在以后的迭代中修复),驱动器号似乎无关紧要(只是不要使用C:\驱动器,因为它具有一些额外的安全性),用作匹配RTM二进制文件的路径。
srv03rtmD:\srv03rtm\ - 取消对提取的目录(包括子文件夹和文件)的只读设置。如果下次您会看到只读打开,那也没关系,因为您已经“解锁”了所有文件。
运行环境
对于 2000/XP/2003 用户:
- 在初始化 Razzle 之前,必须安装 .NET Framework 1.1,因为如果没有它,Razzle 将无法正常初始化环境。安装程序包括 。
tools\prereq - 创建桌面快捷方式(请参阅下面的说明)并更改为
%windir%\system32\cmd.exe /k D:\srv03rtm\tools\razzle.cmd free offlineStart inD:\srv03rtm - 使用您创建的快捷方式打开 razzle 窗口。
对于Vista+用户:
- 关闭 Windows Defender 或立即将其删除!这将使编译时间延长 5 倍!
- 通过导航到 或按注册表:设置为 0 来关闭 UAC。应用注册表后,某些版本可能需要重新启动。
Control Panel -> User Accounts -> Change User Account Control SettingsHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\SystemEnableLUA - 以管理员身份运行命令提示符(通常可以通过在开始菜单中键入cmd,右键单击来完成
Command Prompt->Run as administrator) - 在命令提示符下,切换到源文件夹:
cd /d D:\srv03rtm - 现在启动 razzle:用于 32 位客户端和 64 位客户端。
tools\razzle.cmd free offlinetools\razzle64.cmd free offline
第一次在源代码副本中运行 razzle 时,它需要初始化一些东西,给它几分钟,过了一会儿会出现一个记事本窗口 - 确保关闭它以继续初始化。
重要:一旦 razzle 初始化,运行以完成构建环境的准备(在此树中首次启动 razzle 后只需要运行一次)tools\prebuild.cmd
建筑
重要:目前,在使用许多(超过 4 个)线程进行构建时,构建似乎不能很好地运行。如果您的构建计算机有更多线程,建议通过添加到构建命令(例如,或-M 4build /cZP -M 4bcz -M 4)
干净的构建
执行所有组件的干净重建(首次构建需要):
build /cZP(bcz也被别名到这个)
“肮脏”的构建
仅构建自上次干净构建以来已更改的组件:
build /ZP(bz也被别名到这个)
构建后
- 下载缺少二进制文件包,其中包含 AMD64 和 X86 版本缺少的二进制文件。
- 从该 7z 中,将要构建的构建类型的二进制文件文件夹的内容提取到构建树二进制文件夹中(例如,应该在构建期间创建),7z 应包含所有 SKU 的文件(使用 Win2003 Enterprise 中的 pidgen.dll,因此您的构建应接受企业产品密钥)
D:\binaries.x86fre - 在提取过程中要求覆盖文件夹时,请选择“
是”,但当要求覆盖 DUser.pdb/dll 等文件时,请确保选择“否! - 添加丢失的文件后,您应该具有 、 等文件。
binaries.x86{fre/chk}\_pop3_00.htmbinaries.x86{fre/chk}\ql10wnt.sys - 在 razzle 窗口内运行(如果您只想处理特定的一个(没有括号!),请使用,如果您忽略这一点并且没有对每个 SKU 使用 missing.7z / missing.cmd,则会出现错误)。初次使用
tools\postbuild.cmd-sku:{sku}filechktools\postbuild.cmd -full
构建后问题
- 构建完成后,假设您使用了上面的文件并正确地遵循了指南,它应该有望成功而没有错误,并且不应该有任何文件!
misbin.7zbinaries.x86fre\build_logs\postbuild.err - 否则,请查看内部 - 此处的大多数消息可以忽略不计,但是如果您看到与要使用的版本相关的错误,则可能需要重新运行 ,或再次提取。
postbuild.errfilechktools\missing.cmdmisbin.7z - 如果包含类似或尝试重新导入密钥文件的消息(双击它,通过提示按下一步,密码为空),并确保您的系统日期设置为当前日期。
postbuild.err(crypto.cmd) ERROR(ntsign.cmd) ERRORtools\driver.pfx - 如果 postbuild.err 有关于丢失文件的 filechk 错误,请尝试将以下内容复制到批处理脚本中,并在 razzle 提示符下运行它(在使用 postbuild 一次之后):
hwcomp.dat
创建可引导的 ISO 文件
- 执行其中为以下选项之一:
tools\oscdimg.cmd {sku} [destination-file (optional)]{sku}srv- Windows Server 2003 标准版sbs- Windows Server 2003 小型企业版ads- Windows Server 2003 企业版dtc- Windows Server 2003 数据中心版bla- Windows Server 2003 Web 版per- Windows XP 家庭版pro- Windows XP 专业版
- ISO 将保存到 ,除非作为参数提供。
{build-drive}\{build-tag}_{sku}.iso[destination-file]
故障 排除
如果您在构建过程中遇到任何问题,希望您的问题可以在这里得到解答,如果不能随意在线程中发布。
证书导入向导:发生内部错误...
PFX 证书可能未正确生成,需要重新生成它们。为此,您应该按照以下步骤操作:
- 从那里查看并安装,然后跳到您的架构文件夹(x32 或 x64)并安装,然后.确保 OpenSSL 在您的路径中(因为安装程序默认不会设置它)。
tools\prereqMSYS 1.0.11.exeVC_redistOpenSSL - 下载 zip 或执行 CertUtil 存储库,或使用原始指南重新生成它们。
git clone - 打开 MSYS 并切换到提取/克隆存储库的目录。
- 通过附加所有属性并将.sh转换为UNIX格式
chmod -r 0777 *dos2unix *.sh - 执行
./generate.sh - 将文件复制到源代码树 (
srv03rtm.certsD:\srv03rtm)
运行 razzle 后,它显示一堆错误,“无法识别 tfindcer”等
您可能使用的是 64 位系统,但直接运行,您应该改用,这将进行设置,以便 razzle 为您使用正确的工具。希望有了这个,其他错误应该消失了。razzle.cmdrazzle64.cmdtfindcer not recognized
在构建过程中,我收到一个错误,提到directui.lib(parse.obj) LNK2011precompiled object not linked in
这是由我们目前必须使用的预构建的 parse.obj 文件引起的,以便构建一个有效的 directui.lib,目前此文件要求您的源代码树位于驱动器根目录上的文件夹中,使用任何其他文件夹都会导致错误发生。可悲的是,尝试解决此问题,例如编辑parse.obj或更新代码以构建parse.cpp尚未成功。srv03rtm
完整构建后,我收到 1000+ 错误,build.err 内部有错误has bad storage class
似乎是由您的区域设置引起的,据报道,这发生在简体中文中,但也可能发生在其他语言中。
除了更改您的区域设置/语言设置外,您还可以尝试编辑源文件以删除导致问题的字符,匿名者在此处发布了需要更改的文件列表
我在构建过程中出现错误。TAPI.RES
尝试将源代码文件夹移近驱动器的根目录,理想情况下,它应该只离驱动器根目录一个文件夹(例如。D:\srv03rtm\)
在 Windows 7 上,我在构建时遇到 NTVDM 崩溃
所有NTVDM错误都应该在本指南/ ZIP的v8版本中得到解决,但是如果您仍然遇到任何NTVDM错误,则build.log文件的副本将有助于找出导致它的原因,如果您将其压缩并发布在线程中,希望我们能弄清楚一些事情。我们考虑在 Windows 10 内部版本 1809 或更高版本上生成代码,或者使用最高 Windows Vista 的操作系统。
调试
可以通过编辑已安装版本中的文件并添加到配置行的末尾来启用内核调试。
例如,这里有一个带有两个选项的 boot.ini,一个带有调试功能,一个没有调试功能,此 NTLDR 将在启动时显示操作系统启动选择菜单:C:\boot.ini/debug /debugport=COM1 /baudrate=115200
[引导加载程序]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[操作系统]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=“Windows Server 2003 Enterprise” /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=“Windows Server 2003, Enterprise” /fastdetect
/debug /debugport=COM1 /baudrate=115200
(即使它们的名称相同,NTLDR 也会在操作系统选择菜单上为其添加标记。Windows Server 2003, Enterprise[debugger enabled]
chk (checked)构建是调试的首选,因为它们启用断言和调试消息,尽管运行速度比构建慢得多。 构建也可以很好地调试,但通常调试输出要少得多。chkfrefre
理想情况下,您还应该将 WinDbg 配置为使用 & 符号文件夹,如果 WinDbg 在编译生成的同一台计算机上运行,则它还应该能够对实际的源文件进行源代码级调试。binaries.{buildtype}\symbols.pri\retailbinaries.{buildtype}\symbols\retail
请注意,如果使用 VM 来托管生成,则必须以某种方式将模拟的 COM 端口传递到管道,以便 WinDbg/KD/IDA/etc 使用。
显然有一种方法可以让 KDNET 在 2003 上工作(参见 GitHub - MovAX0xDEAD/KDNET: Kernel Debugging over LAN cable for Windows XP/2003 x32),但这尚未在我们的构建中进行测试,似乎它至少应该支持 VMware 的模拟网络硬件。
(待办事项:在此处添加更多 VM 指南...如果有人想在线程中发布一个,我很乐意在这里添加它)
VMware 设置
- 对于 VMware VM,只需打开 VM 硬件选项,删除打印机硬件,然后单击并选择 。
Add...Serial Port - 在串行端口配置面板中,将其设置为 ,然后在文本框中输入管道名称,例如。.管道应设置为 & 。
Use named pipe\\.\pipe\vmThis end is the serverThe other end is a virtual machine - 显然建议使用该选项,但如果没有它,我已经成功了,这取决于你。
Yield CPU on poll - 现在,只需打开 WinDbg,选择“,打开选项卡,输入为 VM 选择的波特率和管道名称,然后单击”确定”。
Attach to kernelCOM - 现在,WinDbg 应该从文本显示开始,希望下次启动 VM 时,它会自行连接到 WinDbg。
Waiting for reconnect
调试设置/安装
调试器可以通过在正确的时间按 F8 连接到安装程序 - 对于文本模式设置,正确的时间是当询问时,在显示该消息时发送垃圾邮件应该使其以 19200 波特率连接到 COM1(调试选项可以在内部更改,该行指定按下 F8 时应用的选项)。建立调试连接后,可能需要几分钟的时间才能通过阶段。Press F6 if you need to install a third party SCSI or RAID drivertxtsetup.sifSetupDebugOptionsSetup is starting Windows
同样,可以在 Windows 引导加载程序启动之前按 F8 键(进度条等)来调试 GUI 设置,这应该会弹出一个菜单,其中包含 、 等选项。选择将使其在开始设置之前连接到 COM1,再次以 19200 波特率。Safe ModeDebugging ModeDebugging Mode
更改默认波特率
默认的 19200 波特率可以通过编辑文件来更改,在文件中搜索并将其更改为例如,现在它应该默认使用它,而无需任何参数,或者例如。从“启动选项”菜单使用时。base\boot\kdcom\xxkdsup.cBD_19200BD_115200/baudrateDebugging Mode
取消过滤内核消息
即使使用 chk 构建,您也可能会注意到内核似乎没有通过 KD 输出太多,这似乎是因为大多数内核组件都使用 ,它允许将 KD 消息过滤到某些组件(尽管 MS 的文档似乎表明 KdPrintEx 过滤仅在 Vista 中使用,似乎 2003 年也使用它)KdPrintEx
若要启用组件,需要将已安装版本的注册表打开到以下项(如果不存在,则创建它)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug 打印筛选器
然后创建一个名为要启用的组件的 DWORD 值(例如),并将该值设置为十六进制。LDRFFFFFFFF
可以在构建后找到组件注册表名称的列表。这还包含组件的符号名称(例如),可以通过符号名称直接通过 WinDbg/KD 进行设置。(例如,加载符号后,应实时设置 LDR 组件过滤器值)base\published\obj\i386\dpfiltercm.cKd_LDR_Masked nt!Kd_LDR_Mask 0xFFFFFFFF
组件值(默认值)被添加到每个组件值中,实质上是所有组件的默认值 - 因此将其设置为应该使每个组件都打印到 KD。您将从中获得更多的调试输出,但所有 KD 打印都可能会大大降低系统速度(不幸的是,在使用 WIN2000 启用所有组件时,似乎无法禁用组件)WIN20001WIN2000FFFFFFFF
如果您需要在安装构建之前启用组件(例如,内核在安装完成之前出现问题),则需要编辑文件,anon 在这里发表了一篇关于此的帖子,尽管它还没有尝试过 afaik。mergedcomponents\setupinfs\hivesys.inx
其他信息
预修补的 .zip 添加列表
- 新的未过期测试签名证书(有效期至 2021 年 10 月 - tools\openssl.txt 描述了如何生成它们)
- 更新/从 Win2003 SP1 DDK 更新,修复了 olepro32.dll 错误
midl.exemidlc.exe - 重新排序文件,以确保在使用之前构建该文件
dirsconlibk.lib - 生成 DirectUI.lib 所需的 parse.cpp/parse.hpp 文件,以及用于生成这些文件的 bison.exe/Bison.skl 文件。
- 预编译的 parse.obj 文件,因为上面提到的 parse.cpp/parse.hpp 在解析内容时存在一些问题。(parse.obj 取自 win2003 directuid.lib - 使用时会引起LNK4206警告,但通过对文件的更改来抑制)
sources - 来自 RTM ISO 的预编译 GdiPlus v1.0.100.0,将包含在(仅限 x86)中,因为 GdiPlus 代码无法构建。
asms01.cab - 更新了 DUser 构建脚本,以确保它被放置在正确的位置并使用正确的优化标志进行构建。
- 更新了文件,以允许在主生成期间生成 DUser/DirectUI
windows\advcore\dirs - 更新了 com\ole32\olethunk\ole16\tools\ 中的 16 位构建工具,并更新了 olethunk 代码,以便使用它们进行构建。(更新仅在操作系统需要它们时使用,XP/2003 应该能够在不进行更改的情况下很好地构建它们)
- 禁用了 fixprn.pl、ntbackuponpersonal.cmd、gpmc.cmd、msi.cmd 和 incbbt.cmd 从 pbuild.dat 调用,因为我们缺少这些所需的构建文件(您可以从 RTM ISO 或包中获取这些脚本的结果)
2k3-missing-x86fre.7z - 更新&添加异步调用之间的延迟,修复了文件名冲突的问题。(仅在较新的操作系统下需要更新,像XP这样的较旧的操作系统似乎没有这个问题)
setupw95.cmddrivercab.cmd - 更新为始终设置变量,允许内置于内核中的构建标签与 BuildName.txt 匹配(并且不会再将您的构建操作系统用户名泄露到 build-tag 中)
razzle.cmd__BUILDMACHINE__ - 更新为始终设置 ,构建已使用 FixPdbPaths.exe 从 PDB 中删除文件路径,但该方法将零售文件中不存在的 null 字符保留在原地,也可以启用此功能,因为没有理由不这样做。
razzle.cmdNO_PDB_PATHS=1 - 更新了 makefile,以防止MIDL2346警告破坏构建(警告似乎与语言环境相关,由于某种原因仅在 makefile 中定义时才有效,很奇怪)
ixssoBUILD_ALLOW_MIDL_WARNINGS - 重新排序文件以帮助进行单核构建(来自 idkwhy 的 OpenXP git 存储库)
windows\appcompat\dirs - 更新了,现在在完成后关闭 MSI 包句柄(防止在 Win10 上停止构建后),并添加了对 64 位构建操作系统的修复(将 SysWOW64 重定向到 System32)
msitoddf.cpp - 更新的参考文件 - 用于将mshtml输出与已知良好的输出进行比较?上次更新是在 1999 年(!),如果不更新,它似乎会在某些情况下随机导致构建错误(我不确定为什么我们从来没有遇到过这个问题,直到我们尝试了 64 位的东西......
mshtml.ref - [64 倍]添加了32位mapsym.exe和rc.bat MSDOS-Player包装器到dir,因为一些匿名者似乎从这个文件夹中得到错误。
printscan\faxsrv\print\faxprint\faxdrv\win9x\sdk\binw16 - [64 倍]替换为 32 位版本(取自 Sizzle),因为一些匿名者在 MS-DOS Player 报告错误的 DOS 版本时遇到了问题,破坏了这两个工具,因为它们需要 DOS 2.0+
masm.exe/mkpublic.exe - [64 倍]将某些 16 位工具的 MS-DOS Player 替换为重新编译的 amd64 版本,由线程中的匿名者提供(非常感谢!
_x64\tools\tools16\16_bit_build_tools_v2.zip - 添加了 amd64 构建所需的缺失库,取自 XPSP1 树。
public\internal\windows\lib\amd64\usp10p.lib - 将 parse.obj 添加到 & 文件夹,从 amd64 文件中提取。
windows\advcore\duser\directui\engine\parser\obj\amd64objddirectui.lib - 从 winlogon200X 包中添加了 &,这些将使 msgina/userenv 的 amd64 版本使用 SP1 导出序号,从而提高与 SP1 winlogon 和其他 SP1 文件的兼容性。
msgina_sp1.defuserenv_sp1.def - 添加了 & 来自 anon 的反编译,以及原始 exp.h(从早期预修补的 zip 中覆盖较旧的修改后的 exp.h)
exinit.csystime.c - 添加了预生成的文件,包括 x86/x64 的 defs,应该有助于解决在 x86/x64 版本之间切换的问题。
inetsrv\iis\svcs\cmp\webdav\davcprox\fhcache_p.c - 为 / 添加了 / 包装器,它随机化 TEMP 环境变量并在失败前重试 5 次。
link.batlink16.batlink.exelink16.exe - 更新了内部的 rc16 调用,更改了定义以修复某些 NTVDM 版本下的错误。
net\tapi\thunk\makefile.incWINNT=1WINNT razzle64.cmd它可以负责将 16 位工具转换为 32 位(通过),并在启动 Razzle 之前设置所需的环境变量。MS-DOS Playerprebuild.cmd可以处理安装 driver.pfx 密钥、修复文件属性、删除更新的文件(如果操作系统不需要它们)以及复制 GdiPlus SxS 策略。missing.cmd可以从挂载的 ISO 复制我们没有源的文件。oscdimg.cmd从完成的后期构建生成 ISO 映像。
x64 生成 OS 支持
prepatched.zip v9 添加了对使用 x64 构建操作系统(如 Win10 x64)的支持,这是通过使用 .bat 文件重定向调用以使用播放器、更改某些 makefile 以使用 32 位等效项等来包装某些 16 位工具来完成的。MS-DOS Player
不幸的是,一些包装的 16 位工具仍然可能在没有押韵或原因的情况下随机出错,作为一种解决方法,最糟糕的违规者的 .bat 文件会在失败之前给它 5 次尝试,希望这应该足以让构建完成正常,但其他 16 位工具之一仍然有可能出错......也许将来我会在所有 5 位工具上应用这个 16 次尝试的创可贴。
非常感谢最初致力于修复 16 位工具的匿名 https://rentry.co/16bit-msbuild!
amd64 构建支持
从 v10 更新开始,可以通过使用选项初始化 razzle 来创建 amd64 构建,构建应该大部分没有错误地完成,但请注意,postbuild+ 根本没有更新以在 amd64 上正常工作。win64 amd64
不幸的是,由于 amd64 的 exinit.obj/systime.obj 没有泄漏,因此这些需要从 anon 的反编译中构建。v10a 添加了更新的 exinit.c/systime.c 反编译,这些反编译显然与泄漏中包含的 x86 .obj 文件完全匹配,希望这些文件也能与其他架构很好地配合。
一些匿名者一直在 amd64 上缓慢工作,能够通过文本模式设置并开始启动 GUI 模式设置,但遗憾的是,截至此版本,没有人能够真正让 GUI 模式完全启动。
请注意,此源代码是在 MS 正式发布 amd64 作为 Server2003 SP1 之前大约 ~2 年发布的,因此可能缺少很多东西。(WRK 可能有一些更新的内核模式部分,既基于 SP1 又包括对 amd64 的支持,但请注意,WRK 也删除了很多东西......
然而,泄漏中也有很多迹象表明 MS 在这一点上确实运行了 amd64,因此我们最终也应该有可能让它工作。
定时炸弹
- 可以通过编辑内部变量来调整时间(第 44 行)
DAYS\tools\postbuildscripts\timebomb.cmd - 设置为将禁用定时炸弹。
DAYS0 - 只有某些参数有效(0、5、15、30、60、90、120、150、180、240、360、444)
DAYS
不同的构建选项
您可以修改 razzle 快捷方式(或在源文件夹中手动执行它)以包含(或删除)其他参数:
free- 构建“免费”位(生产,省略它将生成检查位)chkkernel- 构建“空闲”位时构建“已检查”(测试)内核/HAL/NTDLLno_opts- 禁用二进制优化(对调试很有用,但很可能会使完整构建失败,如果没有优化,某些代码就无法构建)verbose- 启用构建过程的详细输出binaries_dir <basepath>- 指定自定义输出目录(默认为 ,后面添加的后缀不可自定义)binaries.officialbuild- 将 razzle 设置为将其构建为“官方”构建,需要更新 BuildMachines.txt,请参阅以下部分win64 amd64- 针对 amd64 而不是 x86 构建,请参阅上一节。amd64 build support
此处未介绍其他选项,有关详细信息,请参阅。razzle.cmd /?
“OfficialBuild”参数 / BuildMachines.txt
razzle 参数更改了构建中的一些内容,这将使其更接近零售构建,如果您出于任何原因需要与零售构建进行比较,它应该很有用。OfficialBuild
有关受 OfficialBuild 参数影响的事物的列表,请参阅 Things in the tools folder that do things differently if "OFFICIAL_BUILD_MACHINE - Pastebin.com 和 if OFFICIAL_BUILD is #defined:base/busdrv/agp/amdagp8x/amdagp8x.rc#defi - Pastebin.com,感谢编译它们的匿名者!(请注意,这些不是完整的列表,并且并非此处提到的所有内容都保证生效)。
但是,使用此参数需要先使用有关生成计算机的信息更新文件!
更新所需文件的一种简单方法是在源代码树根目录下的 razzle 窗口中运行以下命令:
echo %COMPUTERNAME%,primary,%_BuildBranch%,%_BuildArch%,%_BuildType%,ntblus >> tools\BuildMachines.txt
之后,您可以运行以确保它已正确设置,如果有任何问题,将显示错误消息,否则该命令将返回而不显示任何消息。tools\verifybuildmachine.cmd
有了这个,你现在应该能够在下次初始化 razzle 时使用 OfficialBuild 参数,例如。tools\razzle.cmd free offline officialbuild
需要注意的一些小注意事项:
- 如果将 build arch 或 build type 更改为 amd64,或更改为 checked build),则需要再次运行 echo 命令,为该 build arch/type 组合添加计算机
- 如果您在启动 razzle 后看到,请重新运行 echo 命令,然后再次关闭/重新初始化 razzle,否则构建将无法正确地将自己视为正式版本。
Clearing OFFICIAL_BUILD_MACHINE variable
创建新的构建后配置
tools\postbuild.cmd -fulltools\missing.cmdtools\postbuild.cmd
如果您只想处理特定的一个,请使用(没有括号!-sku:{sku}
构建特定组件
大多数组件可以单独构建。例如,如果要重新生成组件,请执行以下步骤:ntos
cd base\ntos(您也可以使用 Razzle 为您设置的别名)ntosbcz(别名build /cPZ)
通常足够聪明,可以正确地包含您的更改,而无需重新构建,因为它用于查找差异。postbuild.cmdbindiff
生成新的内部版本号/名称
版本信息存储在\public\sdk\inc\ntverp.h
您还可以使用来快速生成新的内部版本名称。m0 set_builddate set_buildnum set_buildname
原始 CD 文件名
5.2.3790.0.srv03_rtm.030324-2048_x86fre_server-standard_retail_en-us-NRMSFPP_EN.iso(SHA1:A600409482A5678EF6AF2B26D3576D6D9894178D)5.2.3790.0.srv03_rtm.030324-2048_x86fre_server-datacenter_retail_en-us-NRMDOEM_EN.iso(SHA1:E2B47A7CE45C6C6305594CEE4C1B64894805AAF4)5.2.3790.0.srv03_rtm.030324-2048_x86fre_server-enterpriseserver_retail_en-us-NRMEFPP_EN.iso(SHA1: 0309FFB4181BA5122C692A6E1079E9FC1D53FCE4)5.2.3790.0.srv03_rtm.030324-2048_x86fre_server-webserver_retail_en-us-NRMWFPP_EN.iso(SHA1: 46C1CCB2CFC96803E304A35BEF50CD71B2C1DE38)sbs.iso(转换自 MDF;SHA1:CDB30C80FDE314C16CA11F5CD31650ECBEC7A214)5.2.3790.0.srv03_rtm.030324-2048_x86chk_server-enterpriseserver_retail_en-us-NRMECHK_EN.iso(SHA1:EEF5F921CC8FC20FB29A862E1E132359E0D151BB)5.2.3790.1830.srv03_sp1_rtm.050324-1447_amd64fre_server-enterprise_retail_en-us-ARMEXFPP_EN.iso(SHA1: 076EDCF017EDE0B2D0D8067FA52CF3D44EEEF79A)5.2.3790.1830.srv03_sp1_rtm.050324-1447_amd64chk_server-enterprise_retail_en-us-AX2EXCFPP_EN.iso(SHA1: 8916DFBB1D93A9CECB1FE8600BE2E2C752E85E7F)5.1.2600.0.xpclient.010817-1148_x86fre_client-home_retail_en-us-WXHFPP_EN.iso(SHA1:B273C8D41E3844E3E46722F52F5A4CF9F206C8D0)5.1.2600.0.xpclient.010817-1148_x86fre_client-professional_retail_en-us-WXPFPP_EN.iso(SHA1: 1400DED4402D50F3864ED3D8DCF5CC52BA79A04A)5.1.2600.0.xpclient.010817-1148_x86chk_client-professional_retail_en-us-WXPFPP_EN.iso(SHA1: 017F10E4555D1A9280874B9B0243442F045F1B2D)
产品密钥
- 评估(任何版本,如果您设置了定时炸弹,则默认设置为 360 天):99999-99999-99999-99999-99999
- 标准版:M6RJ9-TBJH3-9DDXM-4VX9Q-K8M8M
- 企业版:QW32K-48T2T-3D2PJ-DXBWY-C6WRJ
- 企业x64:KK2WD-BFYJ6-77X87-8TRBF-9B343
更改日志
每个主要版本都可能会破坏肮脏的构建,需要全新的干净构建,如果可能,建议将新版本应用于新提取的源代码。
V10版本
- (第10A版)添加了 & from 匿名反编译,以及原始 exp.h(从早期预修补的 zip 中覆盖较旧的修改后的 exp.h)
exinit.csystime.c - (第10A版)更新了 prebuild.cmd 以删除泄漏中包含的 fre /,因此将改用我们重新创建的版本(允许构建更接近原始的 chk 内核,而不是包含 fre exinit/systime 位的 chk 内核) 如果您从早期预修补的 ZIP 更新,建议再次运行 prebuild.cmd!
exinit.objsystime.obj - (第10A版)更新了 missing.cmd 以包含一些仅限 chk 的文件,以及 srv_info.chm
- (第10A版)添加了预生成的文件,包括 x86/x64 的 defs,应该有助于解决在 x86/x64 版本之间切换的问题。
inetsrv\iis\svcs\cmp\webdav\davcprox\fhcache_p.c - (第10A版)为 / 添加了 / 包装器,它随机化 TEMP 环境变量并在失败前重试 5 次。
link.batlink16.batlink.exelink16.exe - (第10A版)更新了其他 .bat 包装器文件,以使用 5 次重试而不是 3 次。
- (第10A版)更新了内部的 rc16 调用,更改了定义以修复某些 NTVDM 版本下的错误。
net\tapi\thunk\makefile.incWINNT=1WINNT - [64 倍]将某些 16 位工具的 MS-DOS Player 替换为重新编译的 amd64 版本,由线程中的匿名者提供(非常感谢!
_x64\tools\tools16\16_bit_build_tools_v2.zip - 添加了 amd64 构建所需的缺失库,取自 XPSP1 树。
public\internal\windows\lib\amd64\usp10p.lib - 将 parse.obj 添加到 & 文件夹,从 amd64 文件中提取。
windows\advcore\duser\directui\engine\parser\obj\amd64objddirectui.lib - 添加了基于 anon 反编译的更新和 amd64 exinit.obj/systime.obj 文件。
base\ntos\ex\exp.h - 从 winlogon200X 包中添加了 &,这些将使 msgina/userenv 的 amd64 版本使用 SP1 导出序号,从而提高与 SP1 winlogon 和其他 SP1 文件的兼容性。
msgina_sp1.defuserenv_sp1.def
V9 版
- (v9c版)[64 倍]添加了32位mapsym.exe和rc.bat MSDOS-Player包装器到dir,因为一些匿名者似乎从这个文件夹中得到错误。
printscan\faxsrv\print\faxprint\faxdrv\win9x\sdk\binw16 - (第9B版)[64 倍]替换为 32 位版本(取自 Sizzle),因为一些匿名者在 MS-DOS Player 报告错误的 DOS 版本时遇到了问题,破坏了这两个工具,因为它们需要 DOS 2.0+ - 感谢帮助测试的线程中的匿名者!
masm.exe/mkpublic.exe - 64 位构建器支持:添加了包含固定文件的子目录,用于在 64 位主机下构建(在 Win7SP1 x64 和 Win10 x64 下测试)
_x64razzle64.cmd - 将 razzle.cmd 更新为无需 officialbuild 参数即可设置(在上面的添加列表中进行推理)
NO_PDB_PATHS=1 - 通过添加到makefile来修复构建错误,阻止MIDL2346警告中断构建(警告似乎是由使用非美国语言环境引起的吗?这可以通过参数或语言环境模拟器修复吗?
ixssoBUILD_ALLOW_MIDL_WARNINGS=1 - 重新排序文件以帮助进行单核构建(来自 idkwhy 的 OpenXP git 存储库)
windows\appcompat\dirs - 更新了,现在在完成后关闭 MSI 包句柄(防止在 Win10 上停止构建后),并添加了对 64 位构建操作系统的修复(将 SysWOW64 重定向到 System32)
msitoddf.cpp - 更新的参考文件 - 用于将mshtml输出与已知良好的输出进行比较?最后一次更新是在 1999 年(!),如果不更新,它似乎会在某些情况下随机导致构建错误(虽然只开始出现在 Win10 上,但从未出现在 Win7/XP 上......
mshtml.ref
V8版本
- (8D版)恢复更改,因为匿名者设法在 XP x64 ISO 映像中找到它,现在包含在
srv_info.chm2k3-missing-x86fre-v7.7z - (8D版)更新以允许将文件夹包含在 CD 映像中。
cddirs.lstvalueadd\3rdparty - (v8c版)更新了 razzle.cmd 以始终设置变量,而不考虑“离线”参数,允许内核中内置的构建标记匹配 BuildName.txt
__BUILDMACHINE__ - 注意:上面的 razzle.cmd 更改之后需要清理构建!如果您想继续使用当前版本进行“脏”构建,请确保不要从此包中提取更新的 razzle.cmd
- (v8c版)如果未提供目标路径,则使 oscdimg.cmd 使用 BuildName.txt 中的生成标记作为输出文件名
- (v8c版)删除了 directui_XP.lib 文件,因为我们构建的 directui.lib 似乎工作正常
- (第8B版)添加了用于 DirectUI 的预构建 parse.obj 文件,取自 win2003 directuid.lib - 允许我们很好地构建 DirectUI 的工作版本!
- (第8B版)更新了 和 文件,以禁止显示由预构建的 parse.obj 生成的LNK4206警告。
shell\cpls\appwzdui\winnt\sourcesshell\ext\logondui\sourcesshell\shell32\winnt\sources - (第8B版)删除了所有引用(不能位于任何地方,似乎没有 RTM ISO 有它),也可以删除它,这样它就不会再搞砸任何构建。
srv_info.chm - (第8B版)更新&添加异步调用之间的延迟,修复了文件名冲突的问题。(仅在较新的操作系统下需要更新,像XP这样的较旧的操作系统似乎没有这个问题)
setupw95.cmddrivercab.cmd - (第8B版)更新了文件,以允许在主生成期间生成 DUser/DirectUI
windows\advcore\dirs - (第8A版)从 pbuild.dat 中禁用了 incbbt.cmd,因为缺少 incbbt.cmd 文件
- 更新了 com\ole32\olethunk\ole16\tools\ 中的 16 位构建工具,并更新了 olethunk 代码,以便使用它们进行构建。
- 删除了预构建的 16 位代码
- 更新了 prebuild.cmd 以处理更新的 16 位工具,而不是使用预构建的内容(仅在操作系统需要时才使用更新的文件)
- 禁用了来自 pbuild.dat 的 fixprn.pl、ntbackuponpersonal.cmd、gpmc.cmd 和 msi.cmd 调用,因为我们缺少这些所需的构建文件(您可以从 RTM ISO 或包中获取这些脚本的结果)
2k3-missing-x86fre.7z - 感谢 anon 谁制作了 ,我们现在应该能够在没有任何构建后错误的情况下进行构建!
2k3-missing-x86fre
版本7
- (7e) 删除了 DUser/DirectUI 构建说明,将 DUser.dll 重新添加到 missing.cmd - 可悲的是,我们构建的 DUSE 无法正常工作并破坏了 SKU 的登录屏幕。可能是因为 Bison.skl 是由 MS 定制的,而源代码中缺少它。
pro - (7d) 从 missing.cmd 中删除了 DUser.dll
- (7c) 更改了 DUser placefil.txt,因此 DUser.dll 被放置在 binaries.x86fre 根目录中
- (7c) 更新了 DUser bldenv.cmd,以便“bldenv release”也将重置优化标志,现在发布版本将得到适当的优化
- 包括来自 guideanon 的 v4 工具包的 Win7 修复程序,希望能减少人们的 NTVDM 错误
- 添加了用于构建DUser.dll / DirectUI.lib的文件和说明,现在可以构建正确的server2003版本,而不需要WinXP版本
- 添加预构建的 GdiPlus 1.0.100.0,因为我们无法构建 GdiPlus 代码 atm(应该允许构建一个有效的
asms01.cab/hivesxs.inf) - 已删除 / 从 missing.cmd
asms01.cabhivesxs.inf - 将 prebuild 移至 ,之后不再删除自身,以防需要再次运行
tools\prebuild.cmd - 重新排序了一些构建准备步骤,添加了有关在主构建之前构建的详细信息
DirectUI.lib
这篇关于OpenXP(Windows Server 2003 RTM,NT 5.2.3790.0)构建指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!