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

Lel*_*uge 6 windows kernel

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

sno*_*one 8

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

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

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

斯科特


0xC*_*22L 5

看看这里:

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

EPROCESS是与PEB用户模式等效的内核模式.更多细节可以在Alex Ionescu网站上的这份文件以及Schreiber和其他关于NT内部的书籍中找到.

dt在WinDbg中使用以了解它们的外观.