2011-04-26 399 views

回答

5

看一看這裏:

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來了解它們的外觀。

+0

非常感謝你 – 2011-04-27 01:57:07

+0

@Eknath艾爾:不客氣。看看你對Jason的回答的評論。即使你不能接受兩個答案,你仍然可以上調他的答案。 – 0xC0000022L 2011-04-27 19:55:04

1

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

KPROCESS是EPROCESS的一個子集。如果您查看調試器中的字段,您會看到KPROCESS包含的字段與進程的調度和簿記更密切相關,而EPROCESS在其中包含更高級別的進程上下文。名稱,據我所知,來自與這些結構(執行具有結構和功能往往與防爆前綴,而內核結構和功能經常與柯前綴)

你可以看到這個交互不同的子系統在不同的文件功能。考慮KeStackAttachProcess的原型(http://msdn.microsoft.com/en-us/library/ff549659(v=vs.85).aspx),它是一個Ke函數並且需要一個KPROCESS。沒有任何接受EPROCESS(或KPROCESS)的導出和記錄的Ex函數,但是Ps函數完全在EPROCESSES中處理。

線程與KTHREAD和ETHREAD存在類似的鴻溝。

8

這是簡化的,但Windows O/S的內核模式部分分爲三部分:HAL,內核和執行子系統。執行子系統處理一般的操作系統策略和操作。內核處理低級操作(例如自旋鎖,線程切換)以及調度的進程體系結構特定細節。 HAL處理在處理器體系結構的特定實現中出現的差異(例如,中斷在這個x86實現上的路由方式)。這在Windows內部的書中有更詳細的解釋。

當您創建新的Win32進程時,內核和執行子系統都要跟蹤它。例如,內核想知道進程中線程的優先級和親和性,因爲這將影響調度。執行子系統希望跟蹤該過程,因爲例如安全執行子系統想要將令牌與過程相關聯,以便稍後進行安全檢查。

內核用來跟蹤進程的結構是KPROCESS。執行子系統用來跟蹤它的結構是EPROCESS。作爲一個實現細節,KPROCESS是EPROCESS的第一個字段,所以執行子系統分配EPROCESS結構,然後調用Kernel來初始化它的KPROCESS部分。最後,這兩個結構都是表示用戶進程實例的Process Object的一部分。這也應該都包含在Windows內部的書中。

-scott

相關問題