欢迎来到天天文库
浏览记录
ID:36612341
大小:481.43 KB
页数:93页
时间:2019-05-13
《Windows源码分析整理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、【Windows源码分析】(一)初始化内核与执行体子系统标题:【Windows源码分析】(一)初始化内核与执行体子系统作者:北极星2003时间:2008-03-22,23:59链接:http://bbs.pediy.com/showthread.php?t=61749对于那么没有相关经验的朋友,在阅读本文时最好对照windows源码来看,否则光看着这么多数据结构就足以头大。对于这篇文章,严格来说,应该是属于学习笔记型,如有分析不当的地方,请各位多指教!本文的主要目标是根据windows源码分析内核
2、与执行体初始化流程,过程中会涉及大量的内核数据结构与函数,文中并不会介绍每个结构的含义及作用。内核中有很多晦涩难懂且枯燥的代码,我在分析过程尽可能的去分析每一行代码,否则如果只分析思路而不注重细节那么就跟没分析一样。==========================================================本文结构:一、内核初始化1.1系统启动过程简介1.2内核初始化二、源码分析2.1内核初始化KiInitializeKernel2.2初始化内核数据结构KiInitSyst
3、em2.3[phase0]Ntoskrnl初始化ExpInitializeExecutive2.4[phase0]初始化进程管理器PsInitPhase02.5[phase1]Ntoskrnl初始化Phase1Initialiation==========================================================一、内核初始化1.1系统启动过程简介对于系统启动过程,已经有太多的资料介绍过了。这里只是稍作温习,为介绍后续内容做准备。这部分的内容参考了http:/
4、/www.yesky.com/317/1711317.shtml。系统的启动过程一般分为5个步骤:(1)预引导过程[1]系统加点自检,同时完成硬件设备的枚举和配置。[2]BIOS确定引导设备位置,加载引导设备的MBR。[3]在MBR中扫描分区表,定位活动分区,并加载活动分区上引导扇区到内存[4]加载系统根目录的ntldr。(2)引导过程[5]初始化Ntldr,完成处理器模式切换和文件系统驱动的加载,如果使用SCSI设备,Ntldr将Ntbootdd.sys加载到内存。[6]Ntldr读取系统根目录
5、的boot.ini,在屏幕显示系统启动菜单,等待用户选择所需要加载的操作系统。[7]Ntldr读取并运行程序Ntdetect.com,完成硬件的检测。[8]Ntldr根据用户的选择调用系统的硬件配置文件。(3)内核加载,在[8]后清除屏幕,显示进度条。[9]加载执行体ntoskrnl.exe[10]加载Hal.dll[11]加载%systemrootSystem32ConfigSystem下的注册表项HKEY_LOCAL_MACHINESYSTEM。[12]选择加载控制集,初始化计算机。[
6、13]根据控制集加载低级硬件设备驱动程序。(4)内核初始化,显示图形界面。[14]内核会使用检测到的硬件数据,在注册表中创建HKEY_LOCAL_MACHINEHARDWA项。[15]其次的工作是内核通过复制HKEY_LOCAL_MACHINESYSTEMSelect子键Current项引用的控制集创建Clone控制集。[16]内核开始进一步加载和初始化设备驱动程序。[17]SessionManager(Smss.exe)按顺序启动Windows2000更高一层次的子系统和各项服务。(5)系
7、统登陆过程[18]系统首先启动Winlogon.exe。[19]启动LocalSecurityAuthority(Lsass.exe)[20]屏幕显示出登陆对话框。[21]系统执行ServiceController(Screg.exe)再次扫描注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl项并自动加载其中系统的或用户的服务。[22]此时,用户已成功的登陆到了Windows2000系统,系统随后把Clone控制集拷贝到LastKnownG
8、ood控制集。1.2内核初始化本文所要介绍的重点是ntoskrnl的初始化流程。这个初始化过程大致分为两个阶段:phase0和phase1。对于具体所处的阶段是由一个全局变量InitializationPhase来标识,当InitializationPhase为0时表示处于phase0,当InitializationPhase为1时表示处于phase1。Ntoskrnl在入口函数中调用KiSystemStartup,而KiSystemStartup又依次为每个CPU调用HalIni
此文档下载收益归作者所有