Windows XP SP1源代码编译方法(笔记)

本文详细描述了如何在WindowsXP环境中搭建编译环境,设置编译参数,执行build命令快速编译,以及制作ISO的过程,包括必备的补丁应用和编译工具的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NT版本   : 5.1
编译号   :2600
编译时间 : 2001年8月17日11点48分

第一步 : 搭建编译环境
  使用VMWare搭建Windows XP的编译环境,注意系统要使用英文版。

第二步 : 设置编译参数

1.将原代码解压到虚拟机的XP系统中的C盘C:\NT目录或者D盘D:\NT目录下。

2.取消所有源代码的只读属性

3.打补丁:解压winxpsp1_perpatched_v1.rar覆盖到原代码,winxpsp1_perpatched_v1.rar是我根据win2003_prepatched_v10a补丁修改的Windows XP XP SP1补丁,网上最新的win2003_prepatched_v10a是给Windows Server 2003修改的补丁,在Windows XP SP1中实测不可用。

winxpsp1_perpatched_v1.rar https://download.csdn.net/download/MYMOTOE6/88722939

4.将NT\tools\razzle.cmd创建快捷方式到桌面,然后点属性编辑razzle.cmd,
    target   :%windir%\system32\cmd.exe /k C:\NT\tools\razzle.cmd free officialbuild 
    Start in : C:\NT

第三步 : 开始编译

1.点击运行razzle.cmd,中间会弹出记事本,点击关闭即可。运行完成后显示当前在管理员权限表示成功。

2.输入build /cZP 或者 perl tools\timebuild.pl -NOCLEANBUILD -NOSYNC -NOSCORCH开始编译

  打开build.log和build.err文件可以查看错误和日志。

  编译完成后的二进制输出文件在 : C:\binaries.x86fre 

  注:输入build /cZP 编译速度要快,timebuild.pl 经过漫长的等待后将编译出所有的发行版本。

第四步 : 制作ISO

  将C:\binaries.x86fre 中的内容全部移动到 C:\svcpack.x86fre\usa\* 目录


 1.运行perl tools\timebuild.pl -NOCLEANBUILD -NOSYNC -NOSCORCH -RESUME 或者 tools\postbuild.cmd 将编译出所有的发行版本。

 2.运行tools\postbuild.cmd -sku:{pro} 将编译出单独的发行版本

   目录在:C:\binaries.x86fre\pro目录中

 3.运行tools\oscdimg.cmd pro 将制作出可安装的ISO

   ISO安装镜像在 :C:pro.iso 


   注 :Windows XP SP1 的tools目录的编译工具可正常编译,但是在制作ISO的时候命令1默认是编译所有的版本SP补丁包,需要调整编译配置,正常编译完成后我直接替换Windows Server 2003的编译工具到Windows XP SP1 目录NT\tools,输入2的制作命令制作出了可安装ISO。

第五步 :用虚拟机开始安装自己编译的Windows XP系统。

   将pro.iso复制到主机系统,开始体验。哈哈!


备注:
  构建编译环境命令    : NT\tools\razzle.cmd

  编译命令            : NT\tools\timebuild.pl //速度很慢

  编译命令            : build                 //速度快点

  构建Windows PE 命令 : NT\tools\makewinpeimg.cmd

  构建媒体中心版本命令: NT\tools\sp\mkmedctr.cmd

  构建平板电脑版本命令: NT\tools\sp\mktabcab.cmd

  丢失文件检查命令    : NT\tools\postbuildscripts\missingfilecheck.cmd

  填充丢失的文件命令  : NT\tools\populatefromvbl.pl 

SKU : 

  per 家庭版

  pro 专业版

  bla WEB版

  srv 服务器版

  ent 高级服务器版

  sbs 小企业版

  ads 企业版

  dtc 数据中心版

启动问题修复 :

  目前Windows XP SP1 原代码缺少的最重要的文件是: winlogon.exe和一些驱动文件


-------------------------------------------------------------
  BIOS->MBR->ntldr

  ntldr                  yes  Windows NT 引导器

  ntdetect.com     yes  Windows NT 硬件检测

  hal.dll                 yes  Windows NT 硬件隔离层

-------------------------------------------------------------
说明 :

  BIOS->MBR->ntldr

  ntldr            yes  Windows NT 引导器

  ntbootdd.sys     no   Windows NT 磁盘驱动

  pagefile.sys      yes   Windows NT 虚拟内存文件

  ntdetect.com     yes  Windows NT 硬件检测

  hal.dll          yes  Windows NT 硬件隔离层

  ntoskrnl.exe     yes  Windows NT 内核

  smss.exe         yes  Windows NT 会话管理器

  win32k.sys       yes  Windows NT 内核模式中的Win32子系统

  csrss.exe        yes  Windows NT 用户模式中的Win32子系统

  autochk.exe      yes  Windows NT 磁盘检查

  winlogon.exe     no   Windows NT 登陆
  
  msgina.dll       yes  Windows NT 登陆认证策略相关模块

  logonui.exe      yes  Windows NT 系统的登录界面

  services.exe     yes  Windows NT 服务和控制

  svchost.exe      yes  Windows NT 服务宿主进程

  wmiprvse.exe     yes  Windows NT WMI操作

  winmgmt.exe      yes  Windows NT Windows管理服务,用于系统管理员创建Windows管理脚本。

  lsass.exe        yes  Windows NT 安全管理器

  wscntfy.exe      no   Windows NT Windows安全中心通知

  wuacult.exe      yes  Windows NT 自动更新

  spoolsv.exe      yes  Windows NT 管理所有本地和网络打印队列及控制所有打印工作。

  alg.exe          yes  Windows NT 网络连接共享和网络连接防火墙。

  verclsid.exe     yes  Windows NT XP 安全更新程序

  userinit.exe     yes  Windows NT 管理不同的启动顺序

  exprorer.exe     yes  Windows NT 桌面和文件资源管理器

  boot.ini              Windows NT 启动选项配置文件

可选 :
 
  bootsect.dos     no   Windows NT OS Loader 对 DOS 与 Windows NT 进行多重开机

  bootfont.bin     no   Windows NT 中文版开机时的中文字形

  psxss.exe        no   Windows NT Posix 环境子系统

库 :

  pidgen.dll       yes  Windows NT 操作系统重要的模块,用于管理产品序列号。


由于XP SP1 是已补丁的方式编译,默认的输出目录被指定到D:\svcpack.x86fre\usa,而编译出来的二进制文件保存在D:\D:\binaries.x86fre,会造成制作ISO的时候找不到文件。经研究有几个重要的环境变量需要设置正确:

  文件名 : razzle.cmd

    set SvcPackDir=%_NTDRIVE%\svcpack
    修改为:
    set SvcPackDir=%_NTDRIVE%\binaries

  set _NTPOSTBLD=%SvcPackDir%%_ArgSepChar%%_BuildArch%%_ArgEmulDir%%_BuildType%
    
  _NTPostBld  编译出来的目录  默认 D:\svcpack.x86fre

  SvcPackDir  服务包的目录    默认:D:\svcpack

  _BuildArch  处理器的类型    默认:x86

  _BuildType  编译类型        默认:fre

  文件名 : ntenv.cmd

    if "%_NTDRIVE%" == "" set _NTDRIVE=D: 设置默认驱动D盘,在其它盘修改这里即可。


  文件名 : pbuildenv.pm
  
    #  $ENV{_NTPOSTBLD} .= "\\$ENV{LANG}"; 注释掉这行不需要添加usa目录。

  postbuild.cmd 调用 pbuild.cmd

  pbuild.cmd    根据 pbuild.dat中的顺序调用子程序。
  
  pbuildenv.pm  设置编译环境


  


  

  

  
  

  
  

  

  
  
  


 

<think>好的,我现在需要帮助用户解决如何编写数据库分页的SQL语句的问题。用户已经提供了一些相关的引用资料,我需要先仔细阅读这些引用,然后综合整理出不同数据库的分页方法。 首先,用户提到了Oracle、SQL Server以及可能其他数据库的分页写法。根据引用[1],Oracle可以使用ROW_NUMBER() OVER()结合子查询来实现分页,示例中使用了行号rn进行范围筛选。而引用[4]和引用[2]提到SQL Server在2012及之后版本支持OFFSET和FETCH,但在2008及更早版本需要用ROW_NUMBER()函数,这和Oracle的方法类似。引用[5]则展示了一种使用top和not in的方法,这可能适用于旧版本的SQL Server或者其他数据库如Access。 接下来,我需要将这些方法分门别类,确保每种数据库的分页语法正确无误。比如,Oracle的分页通常用ROWNUM或者ROW_NUMBER(),而SQL Server不同版本有不同的实现方式。同时,可能还需要提到MySQL和PostgreSQL,虽然用户没有直接引用,但根据我的知识,MySQL使用LIMIT,PostgreSQL也支持LIMIT和OFFSET。 需要注意用户提供的引用中有没有错误或者需要补充的地方。例如,引用[3]中的SQL语句使用了动态SQL拼接,这可能存在SQL注入的风险,需要提醒用户注意参数化查询。另外,不同数据库的语法差异需要明确区分,避免混淆。 然后,我应该组织回答的结构,先介绍分页的基本原理,然后按数据库类型分别说明,每种数据库给出示例代码,并标注版本差异。例如,SQL Server 2012+用OFFSET-FETCH,而旧版本用ROW_NUMBER();Oracle用ROWNUM或ROW_NUMBER();MySQL用LIMIT等。 还需要考虑用户可能的实际需求,比如性能优化。例如,ROW_NUMBER()方法在数据量大时可能效率问题,或者使用OFFSET在大页码时的性能下降,这时候可以提到优化方法,比如使用索引或者避免深分页。 另外,用户提供的示例中有些使用了子查询和CTE(公用表表达式),如引用[4]中的CTE分页,这需要确保语法正确,并解释清楚各部分的作用,比如ROW_NUMBER()函数的排序对分页的影响。 最后,生成相关问题,可能需要覆盖不同数据库的分页优化、性能比较、适用场景等,帮助用户进一步了解。 在整理过程中,要确保所有SQL语句使用正确的语法,如Oracle的ROWNUM需要放在子查询外层才能正确筛选,而ROW_NUMBER()需要别名。同时,注意用户提到的LaTeX格式要求,数学表达式如变量用$包裹,但SQL代码部分不需要,但用户提供的示例中有代码块,需要用反引号包裹。 检查是否有遗漏的数据库类型或方法,比如SQLite的分页写法是否与MySQL类似,以及是否有其他方法如使用游标等,但根据引用内容,可能不需要涉及太偏门的方法,保持回答实用。 总结步骤: 1. 分页的基本原理和作用。 2. 按数据库类型分点说明:Oracle、SQL Server(不同版本)、MySQL、PostgreSQL。 3. 每个数据库给出示例代码,并解释关键部分。 4. 注意事项和优化建议。 5. 相关问题生成。 确保回答结构清晰,符合用户要求的“帮助用户逐步解决问题”,并引用正确的来源标注,如引用[1]到引用[5]中的相关内容。同时,注意用户提到的不可见指令,如使用中文,正确LaTeX格式,生成相关问题等。</think>### 数据库分页SQL语句编写指南 分页是数据库查询中常见的优化技术,用于按需加载数据,提升性能和用户体验。不同数据库的分页实现方式有所差异,以下是主流数据库的分页写法及示例: --- #### 一、**SQL Server** 1. **SQL Server 2012+版本** 使用`OFFSET`和`FETCH`语法,语法简洁直观: ```sql SELECT * FROM 表名 ORDER BY 排序列 OFFSET (页码-1)*每页数量 ROWS FETCH NEXT 每页数量 ROWS ONLY; ``` 示例:查询第2页,每页10条: ```sql SELECT * FROM Employees ORDER BY HireDate OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; ``` [^2] 2. **SQL Server 2008及更早版本** 使用`ROW_NUMBER()`函数结合公共表达式(CTE): ```sql DECLARE @PageNumber INT = 2, @PageSize INT = 10; WITH PaginationCTE AS ( SELECT ROW_NUMBER() OVER (ORDER BY HireDate) AS RowNum, * FROM Employees ) SELECT * FROM PaginationCTE WHERE RowNum BETWEEN ((@PageNumber-1)*@PageSize +1) AND (@PageNumber*@PageSize); ``` [^4] --- #### 二、**Oracle** 1. **使用`ROWNUM`伪列** Oracle的分页需通过嵌套子查询实现: ```sql SELECT * FROM ( SELECT a.*, ROWNUM rn FROM ( SELECT * FROM Employees ORDER BY HireDate ) a WHERE ROWNUM <= 20 -- 结束行号(页码*每页数量) ) WHERE rn > 10; -- 起始行号((页码-1)*每页数量) ``` [^1] 2. **使用`ROW_NUMBER()`函数** 类似SQL Server的语法: ```sql SELECT * FROM ( SELECT a.*, ROW_NUMBER() OVER (ORDER BY HireDate) rn FROM Employees a ) WHERE rn BETWEEN 11 AND 20; ``` --- #### 三、**MySQL** 使用`LIMIT`和`OFFSET`关键字: ```sql SELECT * FROM Employees ORDER BY HireDate LIMIT 每页数量 OFFSET (页码-1)*每页数量; ``` 示例:查询第2页,每页10条: ```sql SELECT * FROM Employees ORDER BY HireDate LIMIT 10 OFFSET 10; ``` --- #### 四、**PostgreSQL** 语法与MySQL一致: ```sql SELECT * FROM Employees ORDER BY HireDate LIMIT 10 OFFSET 10; ``` --- #### 五、**通用优化建议** 1. **索引优化**:确保`ORDER BY`的列已建立索引,避免全表扫描。 2. **避免深分页**:页码过大时,`OFFSET`性能会下降,可改用“游标分页”或“基于键值分页”[^2][^4]。 3. **参数化查询**:防止SQL注入,动态生成SQL时需转义参数[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值