BOOTLOADER会传KiSystemStartup结构址结构中包含BOOT基信息例引导分区文件系统类型等等
KiSystemStartup首先该结构指针赋值变量KeLoaderBlock紧接着KiSystemStartup会P0BootStackKiIdleThread0址存入LOADER_BLOCK中FS寄存器会赋值0x30FS[0x130]清零
调KiInitializeMachineType()KiInitializeMachineType()KeLoaderBlock中读取设备类型赋值KeI386MachineType
调GetMachineBootPointers()获取前GDTRIDTR信息然中断程序NMI等初始化TSS
调KiInitializePcr() 初始化KiIdleThread0ApcStateKiIdleProcess指针赋KiIdleThread0>ApcStateProcess
调KiSwapIDT()然IDT中中断处理函数表初始化中断量表
调KiProcessorStart() 函数判断KiProcessorStartControl值起简单状态机键时什没做退出
调HalInitializeProcessor()HalInitializeProcessor()读取CPUID获前系统中实际处理核数初始化HalPrivateDispatchTable中重服务中HalpSetupPciDeviceForDebuggingHalpReleasePciDeviceForDebuggingHalpGetAcpiTablePhase0HalpCheckPowerButtonHalpMapPhysicalMemory64HalpUnmapVirtualAddress 初始化8259APIC中断处理程序
调KdInitSystem()KdInitSystem首先检查否DEBUG模式果会KdpStub赋KiDebugRoutine初始化KdpDebuggerDataListHeadKdVersionBlock 原常调试STUB初始化调KdPollBreakIn()收取调试报文果BREAKIN报文收赋值KdpControlCPressed返回非零退出进入DbgBreakPointWithStatus()
接程序中KiBootFeatureBitsBit7会设1
调KiInitializeKernel()KiInitializeKernel中首先
· 调_SEH_prolog()
· 调KiSetProcessorType()通检查处理器STEPPINGCPUID中读取信息获处理器种类设置_KPRCB CpuType KiSetCR0Bits()根处理器类型设置CR0BIT16 调KiIsNpxPresent()判断否支持浮点运算器
· 初始化KPRCB MaximumDpcQueueDepth KPRCB MinimumDpcRate KPRCBAdjustDpcThreshold
· 调PoInitializePrcb()初始化KPRCBPROCESSOR_POWER_STATE
· 调KeInitializeDpc()填充KDPC调KeInitializeTimerEx()初始化核步定时器
· 检查BOOTOPTION设置设置EFER寄存器LME 启动IA32e模式
· 中间省略代码分析包括初始化Ki486CompatibilityLockKiFreezeExecutionLock等
· 调KeInitializeProcess()填充第进程KPROCESS
· 根FeatureBits初始化线程参数调KeInitializeThread()初始化线程KiIdleThread0 堆栈P0BootStack进程前面初始化进程
· 调KeStartThread()设置KiIdleThread0READY状态
· 调ExpInitializeExecutive()初始化OBJECT理器初始化安全 进程理器PNP理器进程理器初始化程中创建PsInitialSystemProcess线程Phase1Initialization()PNP理器初始化程读取注册表中设备资源初始化
调MmCreateKernelStack()创建核堆栈
进入KiIdleLoop()
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档