Windows _EPROCESS对象和_KPROCESS对象之间的区别是什么

Windows _EPROCESS对象和_KPROCESS对象之间的区别是什么,windows,kernel,Windows,Kernel,经过分析,我了解到即使是_KPROCESS对象也可以是ActiveProcessLinks列表的成员。EPROCESS和KPROCESS对象之间的区别是什么?什么时候创建一个,什么时候不创建一个?它们在概念上有什么不同?请看这里: EPROCESS是内核模式,相当于来自用户模式的PEB。更多细节可以在Alex Ionescu的网站以及其他关于NT内部结构的书籍中找到 在WinDbg中使用dt,了解它们的外观。EPROCESS在用户模式下不可用。KPROCESS也不是 KPROCESS是EPRO

经过分析,我了解到即使是_KPROCESS对象也可以是ActiveProcessLinks列表的成员。EPROCESS和KPROCESS对象之间的区别是什么?什么时候创建一个,什么时候不创建一个?它们在概念上有什么不同?

请看这里:

EPROCESS
是内核模式,相当于来自用户模式的
PEB
。更多细节可以在Alex Ionescu的网站以及其他关于NT内部结构的书籍中找到


在WinDbg中使用
dt
,了解它们的外观。

EPROCESS在用户模式下不可用。KPROCESS也不是

KPROCESS是EPROCESS的一个子集。如果查看调试器中的字段,您将看到KPROCESS包含与较低级别的进程调度和簿记更相关的字段,而EPROCESS包含较高级别的进程上下文。据我所知,这些名称来自与这些结构交互的不同子系统(执行器的结构和函数经常前缀为Ex,而内核的结构和函数经常前缀为Ke)

您可以在不同的文档化函数中看到这一点。考虑KeStackAttachProcess()的原型,它是一个KE函数,需要一个K过程。没有任何导出和记录的Ex函数接受EPROCESS(或KPROCESS),但Ps函数完全在EPROCESS中处理


线程也存在类似的划分,包括KTHREAD和ETHREAD

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

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

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

-斯科特