windows - _EPROCESS 对象和 _KPROCESS 对象有什么区别

标签 windows kernel

经过分析,我了解到即使是 _KPROCESS 对象也可以是 ActiveProcessLinks 列表的成员。 _EPROCESS 和 _KPROCESS 对象有什么区别?什么时候造一个,一个不造?它们之间的概念差异是什么?

最佳答案

这是简化的,但 Windows 操作系统的内核模式部分分为三部分:HAL、内核和执行子系统。执行子系统处理一般的 O/S 策略和操作。内核处理低级操作(例如自旋锁、线程切换)以及调度的进程架构特定细节。 HAL 处理在处理器架构的特定实现中出现的差异(例如,中断是如何在此 x86 实现上路由的)。 Windows Internals 一书中对此进行了更详细的解释。

当您创建一个新的 Win32 进程时,内核和执行子系统都希望跟踪它。例如,内核想知道进程中线程的优先级和关联性,因为这会影响调度。执行子系统想要跟踪流程,因为例如,安全执行子系统想要将 token 与流程相关联,以便我们稍后进行安全检查。

内核用来跟踪进程的结构是KPROCESS。执行子系统用来跟踪它的结构是 EPROCESS。作为实现细节,KPROCESS 是 EPROCESS 的第一个字段,因此执行子系统分配 EPROCESS 结构,然后调用内核来初始化它的 KPROCESS 部分。最后,这两个结构都是表示用户进程实例的进程对象的一部分。 Windows Internals 一书中也应该涵盖所有这些内容。

-斯科特

关于windows - _EPROCESS 对象和 _KPROCESS 对象有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5790587/

相关文章:

c - 使用 _pipe 非 block 重定向 STDOUT

linux - 如何在 Spike (riscv) 中指定内核参数?

在内核中异步调用 DeviceIoControl

linux - Linux内核中syscalls.h中函数的实现在哪里

c++ - 如何确定 SSD 驱动器是固定驱动器还是连接到 USB?

linux - 更改 Plesk 12 管理员电子邮件

windows - gVIM !start 如何获取返回值?

memory - 如何以编程方式判断 Linux 处于 PAE 模式还是非 PAE 模式?

c - 暂停进程时的底层机制

c++ - 获取辅助监视器的友好名称