版本 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 下测试,结果在其他操作系统下可能会有所不同(如果您要多次复制/粘贴源代码)。
srv03rtm
D:\srv03rtm\
对于 2000/XP/2003 用户:
tools\prereq
%windir%\system32\cmd.exe /k D:\srv03rtm\tools\razzle.cmd free offline
Start in
D:\srv03rtm
对于Vista+用户:
Control Panel -> User Accounts -> Change User Account Control Settings
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA
Command Prompt
-> Run as administrator
)cd /d D:\srv03rtm
tools\razzle.cmd free offline
tools\razzle64.cmd free offline
第一次在源代码副本中运行 razzle 时,它需要初始化一些东西,给它几分钟,过了一会儿会出现一个记事本窗口 - 确保关闭它以继续初始化。
重要:一旦 razzle 初始化,运行以完成构建环境的准备(在此树中首次启动 razzle 后只需要运行一次)tools\prebuild.cmd
重要:目前,在使用许多(超过 4 个)线程进行构建时,构建似乎不能很好地运行。如果您的构建计算机有更多线程,建议通过添加到构建命令(例如,或-M 4
build /cZP -M 4
bcz -M 4
)
执行所有组件的干净重建(首次构建需要):
build /cZP
(bcz
也被别名到这个)仅构建自上次干净构建以来已更改的组件:
build /ZP
(bz
也被别名到这个)D:\binaries.x86fre
是
”,但当要求覆盖 DUser.pdb/dll 等文件时,请确保选择“否
!binaries.x86{fre/chk}\_pop3_00.htm
binaries.x86{fre/chk}\ql10wnt.sys
tools\postbuild.cmd
-sku:{sku}
filechk
tools\postbuild.cmd -full
misbin.7z
binaries.x86fre\build_logs\postbuild.err
postbuild.err
filechk
tools\missing.cmd
misbin.7z
postbuild.err
(crypto.cmd) ERROR
(ntsign.cmd) ERROR
tools\driver.pfx
hwcomp.dat
1
2
3
4
5
6
7
|
@echo off
hwdatgen -i:%_NTPOSTBLD%\pro\i386 -o:%_NTPOSTBLD%\.\hwcomp.dat
hwdatgen -i:%_NTPOSTBLD%\per\i386 -o:%_NTPOSTBLD%\perinf\hwcomp.dat
hwdatgen -i:%_NTPOSTBLD%\bla\i386 -o:%_NTPOSTBLD%\blainf\hwcomp.dat
hwdatgen -i:%_NTPOSTBLD%\sbs\i386 -o:%_NTPOSTBLD%\sbsinf\hwcomp.dat
hwdatgen -i:%_NTPOSTBLD%\srv\i386 -o:%_NTPOSTBLD%\srvinf\hwcomp.dat
hwdatgen -i:%_NTPOSTBLD%\ads\i386 -o:%_NTPOSTBLD%\entinf\hwcomp.dat
|
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 专业版{build-drive}\{build-tag}_{sku}.iso
[destination-file]
如果您在构建过程中遇到任何问题,希望您的问题可以在这里得到解答,如果不能随意在线程中发布。
PFX 证书可能未正确生成,需要重新生成它们。为此,您应该按照以下步骤操作:
tools\prereq
MSYS 1.0.11.exe
VC_redist
OpenSSL
git clone
chmod -r 0777 *
dos2unix *.sh
./generate.sh
srv03rtm.certs
D:\srv03rtm
)您可能使用的是 64 位系统,但直接运行,您应该改用,这将进行设置,以便 razzle 为您使用正确的工具。希望有了这个,其他错误应该消失了。razzle.cmd
razzle64.cmd
tfindcer not recognized
directui.lib(parse.obj) LNK2011
precompiled object not linked in
这是由我们目前必须使用的预构建的 parse.obj 文件引起的,以便构建一个有效的 directui.lib,目前此文件要求您的源代码树位于驱动器根目录上的文件夹中,使用任何其他文件夹都会导致错误发生。可悲的是,尝试解决此问题,例如编辑parse.obj或更新代码以构建parse.cpp尚未成功。srv03rtm
has bad storage class
似乎是由您的区域设置引起的,据报道,这发生在简体中文中,但也可能发生在其他语言中。
除了更改您的区域设置/语言设置外,您还可以尝试编辑源文件以删除导致问题的字符,匿名者在此处发布了需要更改的文件列表
TAPI.RES
尝试将源代码文件夹移近驱动器的根目录,理想情况下,它应该只离驱动器根目录一个文件夹(例如。D:\srv03rtm\
)
所有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)
构建是调试的首选,因为它们启用断言和调试消息,尽管运行速度比构建慢得多。 构建也可以很好地调试,但通常调试输出要少得多。chk
fre
fre
理想情况下,您还应该将 WinDbg 配置为使用 & 符号文件夹,如果 WinDbg 在编译生成的同一台计算机上运行,则它还应该能够对实际的源文件进行源代码级调试。binaries.{buildtype}\symbols.pri\retail
binaries.{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 指南...如果有人想在线程中发布一个,我很乐意在这里添加它)
Add...
Serial Port
Use named pipe
\\.\pipe\vm
This end is the server
The other end is a virtual machine
Yield CPU on poll
Attach to kernel
COM
Waiting for reconnect
调试器可以通过在正确的时间按 F8 连接到安装程序 - 对于文本模式设置,正确的时间是当询问时,在显示该消息时发送垃圾邮件应该使其以 19200 波特率连接到 COM1(调试选项可以在内部更改,该行指定按下 F8 时应用的选项)。建立调试连接后,可能需要几分钟的时间才能通过阶段。Press F6 if you need to install a third party SCSI or RAID driver
txtsetup.sif
SetupDebugOptions
Setup is starting Windows
同样,可以在 Windows 引导加载程序启动之前按 F8 键(进度条等)来调试 GUI 设置,这应该会弹出一个菜单,其中包含 、 等选项。选择将使其在开始设置之前连接到 COM1,再次以 19200 波特率。Safe Mode
Debugging Mode
Debugging Mode
默认的 19200 波特率可以通过编辑文件来更改,在文件中搜索并将其更改为例如,现在它应该默认使用它,而无需任何参数,或者例如。从“启动选项”菜单使用时。base\boot\kdcom\xxkdsup.c
BD_19200
BD_115200
/baudrate
Debugging Mode
即使使用 chk 构建,您也可能会注意到内核似乎没有通过 KD 输出太多,这似乎是因为大多数内核组件都使用 ,它允许将 KD 消息过滤到某些组件(尽管 MS 的文档似乎表明 KdPrintEx 过滤仅在 Vista 中使用,似乎 2003 年也使用它)KdPrintEx
若要启用组件,需要将已安装版本的注册表打开到以下项(如果不存在,则创建它)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug 打印筛选器
然后创建一个名为要启用的组件的 DWORD 值(例如),并将该值设置为十六进制。LDR
FFFFFFFF
可以在构建后找到组件注册表名称的列表。这还包含组件的符号名称(例如),可以通过符号名称直接通过 WinDbg/KD 进行设置。(例如,加载符号后,应实时设置 LDR 组件过滤器值)base\published\obj\i386\dpfiltercm.c
Kd_LDR_Mask
ed nt!Kd_LDR_Mask 0xFFFFFFFF
组件值(默认值)被添加到每个组件值中,实质上是所有组件的默认值 - 因此将其设置为应该使每个组件都打印到 KD。您将从中获得更多的调试输出,但所有 KD 打印都可能会大大降低系统速度(不幸的是,在使用 WIN2000 启用所有组件时,似乎无法禁用组件)WIN2000
1
WIN2000
FFFFFFFF
如果您需要在安装构建之前启用组件(例如,内核在安装完成之前出现问题),则需要编辑文件,anon 在这里发表了一篇关于此的帖子,尽管它还没有尝试过 afaik。mergedcomponents\setupinfs\hivesys.inx
midl.exe
midlc.exe
dirs
conlibk.lib
sources
asms01.cab
windows\advcore\dirs
2k3-missing-x86fre.7z
setupw95.cmd
drivercab.cmd
razzle.cmd
__BUILDMACHINE__
razzle.cmd
NO_PDB_PATHS=1
ixsso
BUILD_ALLOW_MIDL_WARNINGS
windows\appcompat\dirs
msitoddf.cpp
mshtml.ref
printscan\faxsrv\print\faxprint\faxdrv\win9x\sdk\binw16
masm.exe/mkpublic.exe
_x64\tools\tools16\16_bit_build_tools_v2.zip
public\internal\windows\lib\amd64\usp10p.lib
windows\advcore\duser\directui\engine\parser\obj\amd64
objd
directui.lib
msgina_sp1.def
userenv_sp1.def
exinit.c
systime.c
inetsrv\iis\svcs\cmp\webdav\davcprox\fhcache_p.c
link.bat
link16.bat
link.exe
link16.exe
net\tapi\thunk\makefile.inc
WINNT=1
WINNT
razzle64.cmd
它可以负责将 16 位工具转换为 32 位(通过),并在启动 Razzle 之前设置所需的环境变量。MS-DOS Player
prebuild.cmd
可以处理安装 driver.pfx 密钥、修复文件属性、删除更新的文件(如果操作系统不需要它们)以及复制 GdiPlus SxS 策略。missing.cmd
可以从挂载的 ISO 复制我们没有源的文件。oscdimg.cmd
从完成的后期构建生成 ISO 映像。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!
从 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,因此我们最终也应该有可能让它工作。
DAYS
\tools\postbuildscripts\timebomb.cmd
DAYS
0
DAYS
您可以修改 razzle 快捷方式(或在源文件夹中手动执行它)以包含(或删除)其他参数:
free
- 构建“免费”位(生产,省略它将生成检查位)chkkernel
- 构建“空闲”位时构建“已检查”(测试)内核/HAL/NTDLLno_opts
- 禁用二进制优化(对调试很有用,但很可能会使完整构建失败,如果没有优化,某些代码就无法构建)verbose
- 启用构建过程的详细输出binaries_dir
- 指定自定义输出目录(默认为 ,后面添加的后缀不可自定义)binaries
.
officialbuild
- 将 razzle 设置为将其构建为“官方”构建,需要更新 BuildMachines.txt,请参阅以下部分win64 amd64
- 针对 amd64 而不是 x86 构建,请参阅上一节。amd64 build support
此处未介绍其他选项,有关详细信息,请参阅。razzle.cmd /?
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
需要注意的一些小注意事项:
Clearing OFFICIAL_BUILD_MACHINE variable
tools\postbuild.cmd -full
tools\missing.cmd
tools\postbuild.cmd
如果您只想处理特定的一个,请使用(没有括号!-sku:{sku}
大多数组件可以单独构建。例如,如果要重新生成组件,请执行以下步骤:ntos
cd base\ntos
(您也可以使用 Razzle 为您设置的别名)ntos
bcz
(别名build /cPZ
)通常足够聪明,可以正确地包含您的更改,而无需重新构建,因为它用于查找差异。postbuild.cmd
bindiff
版本信息存储在\public\sdk\inc\ntverp.h
您还可以使用来快速生成新的内部版本名称。m0 set_builddate set_buildnum set_buildname
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)每个主要版本都可能会破坏肮脏的构建,需要全新的干净构建,如果可能,建议将新版本应用于新提取的源代码。
exinit.c
systime.c
exinit.obj
systime.obj
inetsrv\iis\svcs\cmp\webdav\davcprox\fhcache_p.c
link.bat
link16.bat
link.exe
link16.exe
net\tapi\thunk\makefile.inc
WINNT=1
WINNT
_x64\tools\tools16\16_bit_build_tools_v2.zip
public\internal\windows\lib\amd64\usp10p.lib
windows\advcore\duser\directui\engine\parser\obj\amd64
objd
directui.lib
base\ntos\ex\exp.h
msgina_sp1.def
userenv_sp1.def
printscan\faxsrv\print\faxprint\faxdrv\win9x\sdk\binw16
masm.exe/mkpublic.exe
_x64
razzle64.cmd
NO_PDB_PATHS=1
ixsso
BUILD_ALLOW_MIDL_WARNINGS=1
windows\appcompat\dirs
msitoddf.cpp
mshtml.ref
srv_info.chm
2k3-missing-x86fre-v7.7z
cddirs.lst
valueadd\3rdparty
__BUILDMACHINE__
shell\cpls\appwzdui\winnt\sources
shell\ext\logondui\sources
shell\shell32\winnt\sources
srv_info.chm
setupw95.cmd
drivercab.cmd
windows\advcore\dirs
2k3-missing-x86fre.7z
2k3-missing-x86fre
pro
asms01.cab
/hivesxs.inf
)asms01.cab
hivesxs.inf
tools\prebuild.cmd
DirectUI.lib