Windows启动

win11 for arm 更新 KB5016629 使系统崩溃 阅读详情

 

Windows 内核研究_1.Windows启动
2009年02月22日 星期日 下午 01:21

 

 

 

 

Windows启动过程预览
1. MBR & Boot Sector

物理硬盘是以扇区(sector)为单位来寻址的。Windows的安装程序会在安装的时候,将一些内容写入你

安装系统的那个硬盘的第一个扇区。这块内容就称为Master Boot Record(MBR).

MBR包括两块内容:
(1). Boot code;
(2). Partition table;

Boot code,也就是启动代码。这段代码是在系统启动的时候,BIOS完成了自检过程,选择了启动设备(

也就是你某个硬盘),然后就将该磁盘的MBR读入内存,并且跳转到MBR所在地址,从而执行其Boot code.

Partition table,也就是分区表。该表只有4项(entry),因为MS的OS允许一个磁盘最多被分为4个主分

区(primary partition)。这里的分区表里面的内容就是这4个分区的相关信息,包括其起始的sector,

相应的标志等等。

对于启动过程而言,MBR的boot code会搜寻这个分区表,在其中查找带有可启动标志(也称为Active)的

分区,然后将该分区的第一个sector(也就是Boot sector)读入,并且执行其中的代码。

在安装程序写入Boot sector之前,需要获知其所在分区的文件系统类型(FAT? FAT32? NTFS?),然后写

入不同的Boot sector。为什么对于不同的文件系统需要不同的Boot sector呢?原因在于Boot sector的

任务,就是要载入OS的系统启动文件,而载入文件的过程,是需要文件系统参与的,所以对应于不同的文

件系统,在Boot sector里面就需要不同的文件系统支持代码,以次来完成系统文件的加载。对于Windows

启动而言,需要加载的文件为Ntldr。

需要补充的是,boot sector里面对于文件系统的支持代码是“最小化”了的。毕竟boot sector的大小最多

也就只有512 bytes,要带有完整的文件系统是不大可能的。而且,我们的需求也很简单,只需要它能够

理解该文件系统,并且能够读取其中的文件就可以了,我们并没有写入文件的需求。

Boot sector将Ntldr加载完成之后,就跳转到Ntldr的入口处,接下去的任务,就交给Ntldr了。这时候,

系统还是运行在16位的实模式下,Ntldr会开启Paging,并转入32为保护模式。

这个过程中,可能碰到的错误信息是下面这个:
对于NTFS文件系统,"BOOT: Couldn't find NTLDRP";
对于FAT文件系统,"NTLDR is missing";
这个错误的意思是Boot sector在分区的根目录下没有找到Ntldr。

2. NTLDR

NTLDR是一个“中间人”,在Boot Sector转入NTLDR的时候,系统处于实模式下,这时候程序访问的任何地址都是实地址,也就是物理地址(虽然这其中还有80x86最基本的分段功能,学过这个实模式汇编的应该知道),并且,这个地址范围也受限在1M(20位地址)以内。所以,进入NTLDR后最先要做的事情就是转入保护模式,以便于能够完全访问32位地址范围。不过,由于此时没有设置好相应的页表,所以,还不能进行虚实地址转换(也就是还没有分页的功能)。

NTLDR需要初始化一定的页表,然后开启分页。这时候,系统已经进入了Windows的标准状态(保护模式+分页)。前面说到转入保护模式的时候,漏说了一个事情,就是初始化GDT和IDT。这里面,关键的是Windows使用的是Flat Memory Mode,也就是其保护模式下,所有段的基地址都一样。这点和其内存管理的机制息息相关,这边就先提一下。

虽然系统已经进入了保护模式,不过,此时的NTLDR还需要依赖一些BIOS调用,来访问磁盘以及显示系统。如果磁盘是SCSI的,而BIOS调用无法访问此类磁盘,那么NTLDR就加载Ntbootdd.sys来替代boot code中的磁盘访问代码。NTLDR和Boot Sector类似,也包含了NTFS和FAT文件系统的只读代码,区别么,其稍有进步,就是能访问子目录了。

由于从Windows2000开始,都有了“休眠”(Hibernation)这种关机方式。于是,NTLDR需要检查系统上是否存在有效的 Hiberfil.sys文件,如果有,那么表明最近一次关机是以“休眠”的方式关机的。于是,NTLDR就开始走“捷径”:读入 Hiberfil.sys文件,然后直接跳转到内核中“唤醒休眠”的代码,从而启动计算机。

正常启动的情况下,NTLDR读入boot.ini文件。如果该文件表明有多个可启动选项,于是就显示启动菜单,供用户选择。

这里又有一个可能的例外,虽然现在这个可能性已经很小了。这个例外就是有DOS的启动选项(包括Win9x和ME系列)。这个情况下,NTLDR 加载 Bootsect.dos文件,转回实模式,并且跳转到该文件中的MBR代码。这时候,就和最开始启动的状态(读入MBR)一样了,从而启动相应的OS。

在用户选择了启动菜单后,NTLDR还要根据该项的参数做一些相应的操作。对于这些参数么,这里就不作说明和解释了。

NTLDR加载并执行Ntdetect.com。该程序是一个16位保护模式的程序,通过BIOS调用,获取系统硬件的信息(比如总线类型啊,系统时间啊,磁盘驱动器啊,并口串口啊等等),然后将这些信息集中起来,返回给NTLDR,并且这些信息在启动的后期会保存到注册标的HKLM/ HARDWARE /DESCRIPTION下。

貌似上面的这些工作都是在后台做的,除了那个可能出现的启动菜单外,其他工作都是用户看不到的。接下来,就该给用户一些反馈信息了。

NTLDR先清屏,然后显示“Starting Windows”和进度条。这里,2000和XP/2003有所不同。2000会显示黑白屏的进度条,这时候屏幕上还没有Windows的logo。而 XP/2003会显示带有Windows logo的彩屏进度条,需要注意的是,NTLDR在开始加载任何“启动驱动”(boot driver)之前,进度条一直是空的。

还有大家可能注意到过的,就是在显示“Starting Windows”的时候,下面还会显示“For troubleshooting and advanced startup options for Windows, press F8.”,然后进度条出现并开始滚动(前进)的时候,就没有机会按F8来进入安全模式之类的了。其实想象,这里面还是有原因的。因为在系统开始加载驱动之前,主要做的事情只是加载内核文件和注册表的System hive。这两个事情和安全模式之类的其他启动方式没有关系,无论是安全模式还是标准启动,都需要加载这两部分东西。而安全模式和标准模式的区别,在于其加载的驱动有所不同。所以,一旦Windows开始加载那些boot driver之后,就无法在改变模式了。


在NTLDR从显示“Starting Windows”开始,需要经过以下步骤:

1. 加载正确的内核以及HAL(默认为Ntoskrnl.exe和Hal.dll)。如果NTLDR在加载这两个文件的过程中出错,无法完成加载,那么会显示下面这条出错信息:Windows could not start because the following file was missing or corrupt,并且会告诉你无法加载的文件名。

2. 从/Windows/System32/Config/System读入System hive。
注:hive是指一个包含了注册表中某个子树的文件。

3. 在System hive中找出所有的boot driver(这类driver的start值为0,即SERVICE_BOOT_START)。系统的所有driver都在注册表的HKLM/ SYSTEM/CurrentControlSet/Services下面有对应的子键(subkey)。

4. 加载boot drivers所在分区的文件系统驱动,以便于之后的boot driver的加载。

5. 加载boot drivers。这时候,才会开始更新屏幕上的进度条。对于Windows 2000来说,就是那个黑白进度条。

6. 设置CPU寄存器,并且跳转到Ntoskrnl.exe的入口。

好,NTLDR的任务总算完成了,接下去就全部交给Ntoskrnl了。当然,在转交控制权的时候,自然也将对方需要的信息(包括内存布局,硬件信息,System hive等)也都交给Ntoskrnl,这样,NTLDR才完成了它的使命

Nginx在Windows下开机自动启动 安装Nginx 在Nginx官网下载页面下载Nginx Windows版本,下载后解压,然后运行目录下的 nginx.exe 启动nginx,这时打开浏览器输入 http://localhost:80/ 就可以看见nginx的欢迎页面,说明nginx已经成功启动了。 Windows下开机自启动 关闭计算机后重新打开电脑,这时如果再去访问 http://localhost:80/ 会报... 阅读详情

相关推荐

Windows启动原理及启动优化

为什么开机进入系统慢?各种开机启动故障让你头疼?了解启动的奥妙,对于Windows系统管理者来说十分重要,对于启动时的故障排查、启动优化有很大帮助;本文将概述计算机启动的原理并提供多种启动优化的解决方案。

Cloud_YC_Wei的博客 1206

win11自动修复失败【已完美解决】

win11自动修复失败的完美解决方案

Jiang5106的博客 7万+

Windows高级启动项

Windows 10 中的多启动过程步骤有别于旧版。例如在 Windows 10 与 Windows 7 的双操作系统环境下,启动进入 Windows 7 的实际步骤如下。启动 Windows 10 →执行 bootim.exe →设置临时启动项→重新启动计算机→使用bootmgr 加载 Windows 7。这个过程实际等于启动了两次,而且如果 Windows 10 的启动文件出了问题的话,可能连启动菜单都无法进入。

悦分享 1961

Windows启动原理

Windows的启动过程极其额复杂。以Windows XP为例,它过程的启动大致分为5个步骤。 第1步 预启动:首先电脑通电自检,并由BIOS(基本输入输出系统)扫描硬件并完成基本硬件配置,然后读取硬盘的MBR(主引导记录)检查硬盘分区表(DPT),自检 后,DPT把系统的控制权交给硬盘的第一个分区PBR(Partion Boot Record),XP的PBR会去找这个分区的NTLDR

踏实每一小步,成就一大步 6518

Windows10启动过程详解

计算机启动是一个复杂而有序的过程,而使用 UEFI 和 BIOS 启动 Windows 10 又是两种不同的过程。

悦分享 2220

Windows启用快速启动

Windows 的启动速度一直是用户所关心的问题之一,Windows 开发团队也在这方面付出了巨大的努力。Windows 10 中的快速启动功能采用了类似休眠的混合启动技术(Hybrid Boot),能使计算机快速启动。从实际感受来说,采用同等配置的情况下,Windows 10 的启动速度明显比 Windows 7 更迅速。如果使用 UEFI 固件,启动速度则会更快。

悦分享 1675

最完整的Windows启动与关机过程

最完整的Windows启动与关机过程        最近在优快云上上传了《Microsoft® Windows® Internals, Fourth Edition: Microsoft Windows Server™ 2003, Windows XP, and Windows 2000》,此书是计算机学习的经典之作。本来说自己有空的话把该书翻译一遍,然后供志同道合者参考,但一直没有

lanhai96的专栏 6945

全面掌握WINDOWS启动项目管理

htmltable {th, td {th {pre {简介:Windows启动项目管理器是一个工具,帮助用户管理和控制Windows中的自启动程序,这对优化系统性能和提高开机速度至关重要。启动项目分散在注册表键、启动文件夹、任务计划程序和服务等多个位置。这款工具可查看、启用/禁用、添加/删除启动项,提供优化建议和安全检查,同时支持日志记录。介绍了一个名为的安装程序,说明了其安装过程,并强调修改启动项目时需谨慎,以防误删重要系统服务或程序。

weixin_32312889的博客 1213

windows系统在启动界面无法启动

换言之,如果问题依然存在,或者您不确定如何操作,建议联系专业的技术支持人员寻求帮助。在处理技术问题时,合理利用工具如gptgaixie、rbsci、PaperBERT等可以提高效率,这些工具可以帮助您更准确地理解文档和技术指南,从而更好地解决问题。一、了解“Windows系统在启动界面无法启动”的含义当您遇到“Windows系统在启动界面无法启动”这个问题时,意味着您的计算机已经完成了硬件检测(POST过程),并且成功加载了Windows启动管理器,但在尝试加载操作系统的核心组件时遇到了错误。

x3088的博客 4505

激光条纹中心提取——Steger

激光条纹中心提取-Steger 好久没有记录了,记录一下今天学习的内容,据说Steger在激光条纹中心提取上神一般的存在。文章和代码都分享给大家了哈,其中有四个文件,3个C++,一个python,python一个抠图文件,3个c++包含背景图+原图, 单张图提取, 多张图提取。 分享代码 #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc.hpp> #i

CharmsLUO的博客 5380

HDRP shader 获取阴影(Custom Pass)

Unity:2021.3.0f1 HDRP:12.1.6

LanQ的博客 2097

Windows开机启动命令

​Logon​: 最常用的标签,对应我们之前讨论的注册表、启动文件夹等登录项。​ Scheduled Tasks​: 任务计划程序中的项目。​ Everything​: 显示所有项目(信息量巨大)。在了解了二者的适用场景后,我们就可以准确选择出最适合自己的方法(具体设置方法如下)。​ 备份配置​:导出注册表启动项或任务计划,便于迁移和恢复。​: 右键点击解压出来的 Autoruns64.exe,选择 ​​“需要管理员权限才能向此目录添加文件。

凭栏落花侧的博客 2157

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查)

本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。

p1q2r的博客 585

windows redis启动

下载好redis后,只需解压。 然后打开dos窗口 进入redis解压目录 cd D:\software\Redis-x64-3.2.100 运行下面命令启动 redis-server.exe redis.windows.conf 成功启动 还可以把redis加入都开机自启动 redis-server --service-install redis.windows-service.co...

whandgdh的博客 2万+

智能检查点优化:动态频率与差异化存储的断点续训实践(模型训练丨容错机制丨人工智能)

本文深入探讨了大规模模型训练中智能检查点优化的核心实践。针对传统固定频率保存导致的存储浪费与恢复缓慢问题,提出了基于损失变化率的动态频率算法与分层差异化存储策略。通过PyTorch代码示例,详细展示了如何实现动态调度与增量保存,有效降低存储成本,并确保训练中断后能快速、可靠地恢复,显著提升训练任务的容错能力与经济效益。

weixin_29072299的博客 333

从零到一:基于Docker与Gewechat协议,打造高可用微信AI助手

本文提供了一份从零开始的实战指南,详细讲解如何利用Docker容器化技术与Gewechat协议,构建一个高可用、低风险的微信AI助手。通过整合Dify AI平台,您可以为微信机器人注入大语言模型的智能,实现自动问答、知识库查询等高级功能,显著提升个人或团队在微信场景下的沟通与信息处理效率。

weixin_29280657的博客 160

Windows的自启动方式

Windows的自启动方式创建时间:2003-10-24文章属性:转载文章提交:Sowhat (sowhat_at_linuxforum.net)/*老文章,但是值得一读*/      Windows的自启动方式    这篇文章断断续续写了有一年,在有些论坛也曾经贴过,读者的回复是两种, 一是不错,二是抄袭。但是我可以保证所有的内容是我个人查阅的资料(包括大脑)和进行试验与思考的结果。如果这也算抄

痴一居 1324

数学建模学习(75):全局敏感性分析Morris 方法

敏感性分析 (SA) 是分析不同应用条件下模型行为的基本实践。提出了许多 SA 技术,从简单的筛选方法到计算成本高昂的基于方差的方法。本篇内容我们通过将 Morris 方法来对模型进行分析。

全栈川川 1万+

windows 下frp服务启动_Windows 下 Frp 设置开机自动启动

本文介绍如何在 Windows 下设置 Frp 开机自动启动。每次要手动运行 Frp 是件麻烦事 →_→ 所以自动启动 Frp 很重要。这里将会给出两种自动启动 Frp 的方法,接下来我们就一起来看看吧。首先,两种方法都必须照着下面这个步骤做才能实现自动启动 (这不是废话吗先在你的 Frp 同目录下新建一个文本,并改名为 start.bat,如果你的文件名是 “新建文本文档” 而不是 “新建文本文...

weixin_39719018的博客 9250

Unreal5从入门到精通之如何在VR中使用3DUI

前面我们讲过《Unreal5从入门到精通之UMG的使用》一般制作游戏时,UI都是添加到屏幕视窗上面的,但是在制作VR时,我们往往需要制作一个3D的UI,放置在场景中,然后使用手柄的射线来和UI进行交互。今天我们就来讲解下,如何在VR中创作和交互3DUI首次操作会感觉好复杂,多多练习,当你熟悉了UE蓝图的操作后会发现,这只是一个常规的蓝图操作而已。祝大家在虚幻的学习过程中非常顺利。希望这篇博客对你有所帮助。

TxNet 1983

30、航空公司调度问题的数学模型解析

本文详细解析了航空公司调度问题中的核心数学模型,包括航班时刻表生成、机组人员排班和飞机调度的建模方法与求解技术。通过定义变量、约束条件及目标函数,结合线性规划、整数规划等方法,帮助航空公司实现高效调度。文章还探讨了模型的优化策略、简化方法以及实际应用案例,为提升航空运营效率提供了理论支持和实践指导。

beer8的博客 258

windows启动修复_如何使用Windows启动修复工具修复启动问题

windows启动修复If Windows isn’t starting properly, you can often use the integrated “startup repair” tool to fix it. This recovery tool will scan your PC for problems like missing or damaged system files....

culul01313的博客 9848

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Windows怎么启动nginx

Windows 启动 Nginx 有 3 种常用方式,推荐用命令行启动(便于管理与排错),也可双击 exe 快速启动或注册为系统服务实现开机自启,以下是详细步骤与验证、管理方法。在 “Path” 填nginx.exe路径(如D:\nginx\nginx.exe),点击 “Install service” 完成注册。从Nginx 官网下载 Windows 版压缩包,解压到无中文 / 空格路径(如D:\nginx),路径下会有nginx.exe。nginx:前台运行,占用窗口,Ctrl+C可停止(适合调试)。

我就是你毛毛哥的博客 1632

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Windows 10 启动过程解析

系统从开机到登录的完整流程可分为六个关键阶段。首先由BIOS/UEFI固件执行硬件检测和安全验证,UEFI模式通过SecureBoot检查启动文件签名。接着加载启动管理器(bootmgr/bootmgfw.efi)并读取BCD配置,确定启动选项。随后加载Windows内核(ntoskrnl.exe)和核心驱动,初始化系统关键进程。最后创建用户会话,加载登录界面完成认证。整个过程涉及MBR/GPT分区结构、EFI系统分区、注册表控制集等多个关键组件,每个阶段都可能出现特定故障(如蓝屏、启动失败等)。

weixin_63006261的博客 2175

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

windows启动nacos启动失败

一、问题 Windows 启动 Nacos 失败 java.io.IOException: java.lang.IllegalArgumentException: db.num is null 失败截图: 二、解决 进入nacos解压目录下bin文件目录下,用文本编辑工具打开startup.cmd set MODE=“cluster” 修改为 set MODE=“standalone” 三、结果 四、报错原因 nacos默认集群启动,未配置的情况下需修改为单机启动 ...

大树 4192
上一篇: 启动代码
下一篇: T1
SearchLife
博客等级 码龄20年 51粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值