[Windows内核源码分析2] 引导过程(进程线程管理器初始化在Phase0部分的分析)

本文详细解析了Windows系统中进程线程管理器的初始化过程,重点关注PsInitSystem函数及其内部的PspInitPhase0流程。文章介绍了进程和线程对象的创建、CID句柄表的建立与移除、工作队列的初始化等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章记录分析进程线程管理器在windows系统引导的阶段0中的初始化工作。主要是PsInitSystem函数。
进入后首先判定是引导过程的哪个阶段:
在这里插入图片描述
下面来看一下PspInitPhase0的整个流程, 刚开始都是一些初始化工作, 这些工作中需要提一嘴的是对进程线程以及模块加载卸载监控的回调的初始化,熟悉反游戏外挂的人肯定对这几个接口非常熟悉。
在这里插入图片描述
核心是从这里开始, 创建了进程对象:
在这里插入图片描述
接下来创建了线程以及作业对象:
在这里插入图片描述
调用ExCreateHandleTable来创造一个进程句柄表, 即CID句柄表。由于这个函数会使得该表位于之前创建的全局内核句柄表链表上, 而这个CID表示属于进程拥有的。
所以调用ExRemoveHandleTable把该表从全局内核句柄表链表上摘除
在这里插入图片描述
接下去初始化了一个工作队列中PsReaperWorkItem类型的回调函数PspReaper, 该函数主要用于当线程结束时释放各类资源:

  1. 释放线程的内核栈
  2. 释放进程的CreateDelete锁
  3. 解引用进程
  4. 解引用自身
    在这里插入图片描述
    当前进程名设置为Idle进程,并通过调用PspCreateProcess创建了第一个进程, system进程。关于PspCreateProcess的分析留到之后,我们这里把关注点放在在引导过程中进线程管理器的初始化。现在只需要知道到这里系统中真正的第一个进程已经跑起来了就是system进程
    在这里插入图片描述
    这里调用了PsCreateSystemThread在当前的Idle进程中创建了一个线程,该线程就是阶段1的初始化函数Phase1Initialization
    在这里插入图片描述
    稍稍进去看看就会发现里面实际上调用了Phase1InitializationDiscard函数, 且传入参数Context就是之前填充的LOADER_PARAMETER_BLOCK结构体
    在这里插入图片描述
    (完)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值