【问题标题】:what is the difference between _EPROCESS object and _KPROCESS object_EPROCESS 对象和 _KPROCESS 对象有什么区别
【发布时间】:2011-04-26 12:49:26
【问题描述】:

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

【问题讨论】:

    标签: windows kernel


    【解决方案1】:

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

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

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

    -斯科特

    【讨论】:

      【解决方案2】:

      看看这里:

      http://channel9.msdn.com/Shows/Going+Deep/Arun-Kishan-Process-Management-in-Windows-Vista

      EPROCESS 是内核模式等效于用户模式的PEB。更多详细信息可以在 Alex Ionescu 网站上的 this document 以及 the book by Schreiber 和其他有关 NT 内部的书籍中找到。

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

      【讨论】:

        【解决方案3】:

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

        KPROCESS 是 EPROCESS 的子集。如果您查看调试器中的字段,您会看到 KPROCESS 包含更多与较低级别的进程调度和簿记相关的字段,而 EPROCESS 在其中具有更高级别的进程上下文。据我所知,这些名称来自与这些结构交互的不同子系统(Executive 具有经常以 Ex 为前缀的结构和功能,而 Kernel 具有经常以 Ke 为前缀的结构和功能)

        您可以在不同的文档化函数中看到这一点。考虑 KeStackAttachProcess (http://msdn.microsoft.com/en-us/library/ff549659(v=vs.85).aspx) 的原型,它是一个 Ke 函数并采用 KPROCESS。没有任何导出和记录的 Ex 函数接受 EPROCESS(或 KPROCESS),但 Ps 函数完全在 EPROCESSES 中处理。

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

        【讨论】:

          猜你喜欢
          • 2011-09-23
          • 2013-06-26
          • 2011-07-31
          • 1970-01-01
          • 2011-11-28
          • 1970-01-01
          • 2011-02-22
          相关资源
          最近更新 更多