NT的真正接管系统乃是从NT分区的引导扇区被引导开始.引导扇的引导代码是在NT安装时被写入的.当NT被装在FAT分区时,NT SETUP写入的是能识别FAT FS的引导代码,而当NT被装在NTFS分区时,NT SETUP写入的是能识别NTFS的引导代码.所以,引导扇区含有一段相关的文件系统代码.注意!这段代码对文件系统仅能进行读操纵,而不能进行写操作.
当引导扇区被引导后,他所干的一件事就是查找NTLDR.该文件必须存在于根目录下,否则系统提示:
BOOT:Couldn't find NTLDR.或A kernel file is missing from the disk.NT就死翘翘了.当加载NTLDR的时候系统仍然是处于实模式下.所以,NTLDR的第一件大事就是将CPU从实模式转换到保护模式下.当NTLDR将所有的1M以下的内存页描述符创建好后,NTLDR再开启页映射功能,现在NT可以访问4G内存了.然后,NTLDR通过内建的文件系统代码来查找根目录下的BOOT.INI.(NTLDR含有FAT和NTFS2种文件系统的只读代码)根据BOOT.INI的内容提示用户可选的操作系统.当用户在缺省的时间内没有选择.NTLDR就引导缺省的操作系统.如果用户选择DOS,那么NTLDR就将根目录下的BOOTSECT.DOS装入内存,(BOOTSECT.DOS是DOS引导扇的COPY件.)然后执行一次热启动.如果此时C:是NTFS,DOS就不会被启动出来.否则,DOS就被引导出来了.
啊哈,然后NTLDR就加载NTDECT.COM.这个程序将显示NTDETECT V4.0 .....这个NTDECT.COM调用的乃是INTxx来执行一大堆的BIOS系统调用.用来进行系统配置的检测.所有检测到的东西将被存到系统注册表的HKLM/HARDWARE/DESCRIPTION项下.
然后,执行再次恢复到NTLDR.屏幕显示OSLOADER V4.0 ....接下来被加载的2个文件组成了WINDOWS NT的核心.那就是:HAL.DLL,NTOSKRNL.EXE.这2个文件在装载时将被检测PE校验和,如果有问题或找不到.NT又要死翘翘了.有一点要说明.单处理器和多处理器的NTOSKRNL.EXE是不同的.支持多处理器的NTOSKRNL.EXE在安装盘里的文件名称是NTKRNLMP.EXE.但是一旦被COPY到NT的系统目录里,名字就变成了NTOSKRNL.EXE.因为NTLDR只加载NTOSKRNL.EXE.加载完这2个文件后,NTLDR再加载所有引导必须的驱动程序,然后加载HKEY_LOCAL_MACHINE/SYSTEM/Services里的值SERVICE_BOOT_START的DRIVER.(此时不初始化.)(我也不知道SERVICE_BOOT_START的DRIVER怎么写,因为一般的KMD如果用SERVICE_BOOT_START值启动就会失败.)然后NTLDR就会锁定NTOSKRNL.EXE的main()函数,然后将控制转移给NTOSKRNL.EXE.
BTW:NTOSKRNL.EXE的main()函数是
int main()
{ // Fire up NT!
  //
  KiSystemStartup();
  return 0;
}
这里描述的乃是NT FOR I386的最初的启动.从引导到加载NTOSKRNL.EXE.而且里面仍然有很多分支没写.例如LAST KNOWN GOOD CONFIGERATION的处理等.直到现在,NT还没有任何NT的模样,连操作系统的雏形也没显示出来.

接下来NT开始了自己复杂的OS核心初始化.首先调用ExpInitializeExecutive,而该函数则调用HAL.DLL里引出的函数HallnitSystem().这时.NT就完成了对中断控制器的初始化和时间片的设定.当HallnitSystem()返回,接下来进行的就是对内存管理器,安全引用监视器,对象管理器,进程管理器的初始化.在内存管理器完成初始化后,NT才显示Microsoft (R) Windows NT (TM) Version 4.0 (Build 1381).而后面的SERVICE PACK号码则是从注册表里HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Windows/CSDVersion取出.当进程管理器初始化完成后(进程管理器是NTOSKRNL.EXE里最后被初始化的一个管理器),进程管理器产生2个进程.一个,乃是IDLE进程.一个,乃是SYSTEM进程.而当返回到ExpInitializeExecutive后,ExpInitializeExecutive就变成了IDLE线程.而IDLE线程的优先级是最低的.

BTW:最要命的是NT SERVER的调度算法.每个线程在INTEL处理器上通常一下就占用120ms.当线程等待一个IO处理时,必定会吃到一个IDLE线程.因为NT的WIN32子系统通常在IO执行完成前不会返回到调用者,而且不切换到其他线程,所以通常情况下如果用SOFTICE呼出来总是看到系统停在HLT指令上.当一个硬件设备完成IO后,产生中断来结束HLT.然后在大堆的后续代码后才回到调用者.如果关闭HLT.系统能够在有限的范围内提高反应速度.我的HALPATCH就是干了关闭HTL指令的活.
好了好了.回到NT的启动话题.

现在调用HAL激活多CPU的功能.(如果系统有2个以上CPU的话.WORKSTATION支持2CPU.SERVER支持4CPU.企业版支持8CPU.企业版SP3后还支持3GB应用程序空间.)然后将依次调用Object Manager, Executive, Kernel, Security Reference Monitor,Memory Manager,Cache Manager,Configuration Manager,I/O Manager, Process Manager.
其中IO管理器负责完成启动值为SERVICE_BOOT_START的驱动程序的初始化,紧接着,启动注册表内启动值为SERVICE_SYSTEM_START的装载.

所有的DRIVER完成初始化后,还没有任何USER MODE的程序,也没有任何环境子系统.系统进程将调用核心函数ExInitializeSystem创建SMSS进程.就是SESSION MANAGER进程.SMSS是第一个USER MODE的应用程序.他又是一个真正的NATIVE APPLICATION.他不依赖于任何子系统.SMSS唯一需要的就是NTDLL.DLL.而且就是他创建了WIN32子系统.
然后SMSS干了:
创建LPC端口对象/SmApiPort.2个线程,等待客户请求如加载子系统等.
创建环境变量.
定义DOS符号联接.
创建附加的页面调度文件.
从HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Session Manager/BootExecute找出引导时加载的NATIVE APPLICATION. 通常有CHKDSK.EXE等.
调用CONFIG MANAGER完成对 HKEY_LOCAL_MACHINE/SAM,HKEY_LOCAL_MACHINE/SAM/SECURITY, HKEY_LOCAL_MACHINE/SOFTWARE配置.
然后加载WIN32K.SYS.这时系统就被切换到图形状态.
启动WIN32子系统.即CSRSS.EXE.
启动WINLOGON.EXE.
创建用于调试的LPC端口,并创建线程来监视.
完成了这些工作后,SMSS就永远等待WINLOGON和CSRSS的进程对象.把自己挂起.
WINLOGON在被启动后.启动SCM(服务管理器).将所有的"自动启动"的SERVICE启动起来.当然,WINLOGON并不等待任何SERVICE的完成启动.很有可能用户已经登陆而SERVICE没有启动出来.当用户的START组里有某些应用程序需要依赖于某些SERVICE的存在的话,就有可能出错.这也是新闻组上老是有程序员讨论的老话题了.就象我们的程序员朋友老是爱写些很初级的问题到自己的主页上:)开玩笑:).
当所有的SERVICE启动无误后,现在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet就成为了LAST KNOWN GOOD CONTROL SET.
当启动SCM后,WINLOGON就创建个工作站,代表KBD,MOUSE,MONITOR.并确保连SERVICE也不能访问该工作站,以保证安全性.当工作站创建好后,就打开3个桌面.APP,SCR SAVER,WINLOGON.MS号称确保WINLOGON桌面的任何激活代码和数据都不能被访问.简直就是屁.只要知道WINLOGON代码的物理内存地址,什么不能修改办到?:)当然,不知道WINLOGON的物理地址倒是真的:)然后就是建立LSA和LPC联接.用于登陆.注销.口令操作.
通过调用LsaLookupAuthenticationPackage获取MSV1_0的相关ID,用于验证身份.(从INSIDE WINDOWS NT抄的:))创建WINLOGON窗口类.确保SAS序列键按下后窗口过程被调用.只有WINLOGON桌面解锁后才能切换到其他应用程序桌面.

在LOGON时,WINLOGON调用GINA来确认用户登陆.这样也提供了一个替换NT本身登陆验证操作的方法.MS的核心讨论组上老是有朋友研究如何获取PASSWD.而答案往往是提供个GINA STUB.:DDD 当然,我自己没有写过GINA STUB.但是MS的相关文档我看了一遍...估计对于写个有用的GINA STUB还不够.当然,我有偷懒的办法,也是多数写GINA STUB程序员的办法,就是把自己串到老的GINA STUB上:DD MS是极力不推荐这样干的.
当用户验证身份完毕,登陆成功,桌面就被解锁.并且调用USERINIT.EXE.该程序会查找出用户的SHELL.并启动之.然后自己就结束生命.这就是从任何一个进程VIEWER看,SHELL都没有父进程的原因.因为父进程已经结束了.

好了,这样,NT就彻底启动出来了.其中关键部分我想已经描述得很清楚了.将来有可能的话,我再对文章的语句润润色,看起来不要太枯燥

Inside NT Boot相关推荐

  1. BOOT INI专辑

    Windows 可能在 Boot.ini 文件中使用 Signature() 语法 概要 在安装 Windows 之后,您可能注意到在 Boot.ini 文件中高级 RISC 计算 (ARC) 路径项 ...

  2. 《白帽子讲web安全》读书笔记_2021年7月16日(2)_第3篇 服务器端应用安全

    第7章 注入攻击 7.1 SQL注入 注入攻击是web安全领域中一种最为常见的攻击方式. XSS本质上也是一种针对HTML的注入攻击. 在第1篇 我的安全世界观中,提出了一个安全设计原则--" ...

  3. 网口扫盲一:网卡初步认识

    网络适配器又称网卡或网络接口卡(NIC),英文名Network Interface Card.它是使计算机联网的设备.平常所说的网卡就是将PC机和LAN连接的网络适配器.网卡(NIC) 插在计算机主板 ...

  4. python兼职平台信号处理_如何在Windows机器上处理python中的信号

    Python的os.kill在Windows上包含了两个不相关的API.当sig参数为CTRL_C_EVENT或CTRL_BREAK_EVENT时,它会调用GenerateConsoleCtrlEve ...

  5. 网卡介绍——MAC与PHY的关系分析

    (一) 网卡初步认识 网络适配器又称网卡或网络接口卡(NIC),英文名Network Interface Card.它是使计算机联网的设备.平常所说的网卡就是将PC机和LAN连接的网络适配器.网卡(N ...

  6. mac_phy_网卡_网口.docx

    MAC地址中的MAC是英文名MediaAccess Control的简称,中文译成介质访问控制,人们习惯上把它称之为网卡地址.硬件地址.适配器地址,MAC地址就如同我们身份证上的身份证号码,具有全球唯 ...

  7. linux 提取cpio_linux cpio

    在使用bootimg tools压缩和打包android的ramdisk时,用到了cpio命令.所以了解一下用法. 参考 cpio用来建立或还原备份. cpio还原 cpio -i 以下是bootim ...

  8. GRUB启动分析之stage1

    http://blog.chinaunix.net/uid-24774106-id-3497929.html 引言 玩Linux的人,肯定会听说过Grub这个神奇的东西,就是开机启动时候下拉一个菜单让 ...

  9. Linux GRUB启动分析之stage1

    我最近学习Linux 基础,有时候看到一些新的东西,就会去找资料,关于喜欢刨根问底的同学,这个博主的文章是很好的,很棒的,真心的大牛,虚心去学习,原来学的东西都感觉记忆不深刻,一知半解,而这位博主的文 ...

  10. [ZT]Inside WINDOWS NT Object Manager

    [ZT]Inside WINDOWS NT Object Manager Inside WINDOWS NT Object Manager ============================== ...

最新文章

  1. CircularFloatingActionMenu
  2. Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据
  3. 统一建模语言UML轻松入门(3)――静态建模:类和对象
  4. 洛谷P1122最大子树和题解
  5. java mongodb 多文档_如何通过Java在MongoDB中一次性插入多个文档
  6. 【Spark】Spark ML 机器学习的一个案例
  7. 杭电oj刷题第一阶段答案
  8. 思科、华为路由器破解过程
  9. 程序员 文本编辑器 c语言,程序员必备的五款文本编辑器
  10. 本地音乐播放器+android8.1,APlayer v1.5.6.8-15681 安卓本地音乐播放器 | 智享阁
  11. 如何快速制作Png格式的图片(不需要PS软件)
  12. 搜索引擎 百度 高级搜索
  13. 【C语言】解决 “address of stack memory associated with local variable ‘num‘ returned”
  14. 300多张精美京剧脸谱,收藏~~
  15. Devops 开发运维基础篇之Jenkins部署与使用
  16. 梯度下降求函数最小值C++样例
  17. 【I²C总线通信协议总结】
  18. 架构师的 36 项修炼1 开篇词:7分钟Get技术人进阶技巧
  19. 三星SDS为韩国航运业成功测试区块链技术
  20. flink run常用参数说明

热门文章

  1. 江苏省计算机一级知识点,江苏省计算机一级考试题库及答案
  2. GridView的dataformatstring设置
  3. linux锐捷代码_Linux下锐捷上网操作
  4. php smarty配置,PHP中使用Smarty模板目录结构配置
  5. C语言编写双人贪吃蛇游戏
  6. jquery+baidu map api 仿安居客地图找房源(基于百度地图)
  7. wap ios android,iOS/Android/WAP 全兼容专题页面制作方法(一)
  8. java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
  9. Winamp v5.6.6.3516
  10. Crystal Reports - New Report