WINDOWS的启动流程 第一NTLDR的作用过程 .首先机器POSTBIOSMBRBOOT SECTORos的引导程序 WINDOWS的引导程序是NTLDR注意这个文件其实是个可执行文件这里机器主要做的工作是CPU从的实模式到的保护模式启用CPU的页机制如果磁盘是SCSI则加载Ntbootddsys来访问磁盘否则用INT来访问这里假如机器没找到Ntldr这个文件在FAT文件系统下机器显示BOOT: Couldnt find NTLDRP而在NTFS下显示NTLDR is missing(这个没有具体实验过是书上这么说的) .NTLDR装载后就先CLS屏幕首先检查根目录下有没有合法的Hiberfilsys这个文件的作用是机器休眠的时候把内存中的所有信息保存到hiberfilsys这个文件中这个文件的大小始终和系统的物理内存大小一致如果希望回收这个空间请打开控制面板下的电源管理选择休眠选项卡去掉启用休眠这一复选项的选中标记系统会自动消除hiberfilsys文件如果有就快速启动到上次机器休眠的状态 .接着处理Bootini如果有多个的启动项那就显示启动菜单(如果只有一个默认的项那就是我们立即就可以看到WINDOWS的启动状态条了) 处理BOOTini WINDOWS自带的一个工具Bootcfgexe可以用这个工具修改当然也可以自己用记事本打开bootini来修改bootini的一些参数会保存在注册表HKLM\System\CurrentControlSet\Control\SystemStartOptions下关于bootini里面的参数大家可以去查阅资料 .下面就是NTLDR调用执行作用是检测的一些基本设备和配置信息 信息包括CMOS里的时间日期信息总线类型磁盘的大小类型数目输入设备的信息并口的信息显卡的类型这些信息收集后保存在HKLM\HARDWARE\DESCRIPTION下面接着就版本下显示Starting Windows进程条而在xp下是显示WINDOWS的LOGO .在显示进程条的过程中机器实际上是在加载系统相应的内核和HAL文件一般是Ntoskrnlexe 和Haldll这个文件如果这个过程中发现找不到文件则会显示Windows could not start because the following file was missing or corrupt这个信息然后读取注册表SYSTEM HIVE(Windows\System\Config\System)来决定需要加载的设备驱动这些设备驱动都在SERVICE_BOOT_START ()里面 .然后加载Ntoskrnlexe这样NTLDR的使命就结束了 第二 Ntoskrnlexe的作用过程这里主要分个阶段来初始化内核最后创建the Session Manager subsystem (Smss)进程 第三 Smss的作用过程 .创建LPC port对象为MSDOS定义符号连接例如COMLPT假如安装有Terminal Services则创建\Sessions目录 运行注册表里HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute定义的程序一般默认的是运行Autochk 执行HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations表键中的延迟删除改名操作 .加载HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 初始化paging files和注册表 创建系统环境变量这些定义在HKLM\System\CurrentControlSet\Session Manager\Environment 加载和初始化WIN子系统的内核模块Winksys 创建WIN子系统服务器进程包括Csrss 创建Winlogon进程 这里的个进程其中一个出现异常那系统都会中断 第四 Winlogon Csrss过程 加载GINA模块默认为Msgina (\Windows\System\Msginadll) 启动服务进程Windows\System\Servicesexe 启动Lsass(the local secyrity authentication subsystem)进程 .Gina开始处理交互式登陆登陆验证成功后Gina就运行HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\UserinitUserinitexe执行的顺序为首先处理HKCU\Software\Policies\Microsoft\Windows\System\Scripts 和HKLM\Software\Policies\Microsoft\Windows\System\Scripts这里的脚本然后处理组策略(假如有的话运行\Windows\System\Proquotaexe)最后运行HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell里的SHELL(如果不存在就运行HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell里的一般这里默认的是EXPLORERexe)注意这里也是最容易让恶意软件利用的地方 .最后就是启动其他的启动程序服务 WINDOWS的关机流程 正常关机都是调用ExitWindowsEx这个函数Csrss收到这个消息后先给Winlogon所属的窗口发关机消息等Winlogon处理完后Csrss然后给每个有关机级别的进程发关机消息(种消息WM_QUERYENDSESSION/WM_ENDSESSION)这里的等待时间在HKCU\Control Panel\Desktop\HungAppTimeout这里设置默认是 milliseconds如果在这个时间范围内有线程没处理完那就会弹出个窗口让用户来结束当然也可以设置让系统自动结束只要设置HKCU\Control Panel\Desktop\AutoEndTasks 为 就可以了对于控制台应用程序则Csrss发这个CTRL_LOGOFF_EVENT事件(服务进程是发CTRL_SHUTDOWN_ EVENT这个事件)同样的流程有个等待时间设置在HKCU\Control Panel\Desktop\WaitToKillAppTimeout (默认为 milliseconds)接着同样的处理系统进程处理完后Winlogon就调用NtShutdownSystem这个函数在调用NtSetSystemPowerState来处理驱动和其他的一些子系统这样整个关机过程就完成了 |