进程可能是用户接触的Windows系统中最多的部分了,对于Windows系统而言,进程是一个独立的地址空间可以为线程提供一个独立的执行环境,
也就是说
进程=
- 独立的地址空间
- 一个进程内核对象
线程=
- 一个线程自己的栈
- 一个线程内核对象
当然这个栈是在进程的地址空间中。那么,也就是说线程才是真正“干活”的东西,进程只不过是一些资源的集合而已。只能说是“原材料”。
在我学习Windows内核以前一直觉得进程的种种特性很神奇,比如说地址空间独立是怎么实现的呢?我们的电脑使用的都是同一块内存怎么能实现独立呢?
再比如说进程是怎么进行管理和实现那些功能的?这些疑问随着我的学习过程不减反增,尤其是当我接触了用户层的一些安全知识后,举个例子:游戏外挂,
外挂自身是一个进程,它要去读游戏进程的数据,那就是跨越进程了。可是这是怎么实现的呢?
事实上一切问题的答案都可以在内核中找到答案,因为内核才是真正的一起东西的管理者。我们只要知道了内核是怎么做的那么一切问题都迎刃而解了。
事实上Windows进程管理器处于Windows内核执行体,进程管理器实际上并不存在这么一个“东西”,所谓管理器是指一系列函数和程序的抽象集合。
我先提出几个疑问,然后通过解答这几个疑问来叙述Windows系统是怎么操作进程的。
- 凡事都有第一次,那么Windows系统中第一个进程是怎么创建的?或者说没有进程的情况下,系统怎么创建进程?事实上这涉及系统初始化的知识。
- 进程是怎么创建的?系统怎样去管理进程?
注意的一点是,创建一个进程是一系列的工作而不是单单创建了进程这么个东西。打个比方,我双击记事本程序,这个进程运行起来了。运行起来了包含着有线程创建了,有模块加载了等等。
提到创建进程,只要是接触过Windows编程的人就会想到CreateProcess函数,熟悉驱动开发的人也会知道NtCreateProcess函数,这个函数正是进程创建的重要函数之一,注意是之一。原因上面已经说了,创建进程是一系列的过程而不只是新建一个进程结构而已。
时间: 2024-10-12 16:58:54