В чем разница между объектом _EPROCESS и объектом _KPROCESS - PullRequest
6 голосов
/ 26 апреля 2011

После анализа я узнал, что даже объекты _KPROCESS могут быть членами списка ActiveProcessLinks.В чем разница между объектами _EPROCESS и _KPROCESS?Когда один создан, а другой нет?Каковы концептуальные различия между ними?

Ответы [ 3 ]

8 голосов
/ 27 сентября 2011

Это упрощено, но часть режима ядра операционной системы Windows разбита на три части: HAL, ядро ​​и исполнительные подсистемы. Исполнительные подсистемы имеют дело с общей политикой и эксплуатацией O / S. Ядро имеет дело с особенностями архитектуры процесса для операций низкого уровня (например, спин-блокировки, переключения потоков), а также планирования. HAL имеет дело с различиями, которые возникают в конкретных реализациях архитектуры процессора (например, как прерывания маршрутизируются в этой реализации x86). Все это более подробно объясняется в книге Windows Internals.

Когда вы создаете новый процесс Win32, и ядро, и исполнительная подсистема хотят отслеживать его. Например, ядро ​​хочет знать приоритет и сходство потоков в процессе, потому что это повлияет на планирование. Исполнительные подсистемы хотят отслеживать процесс, потому что, например, Исполнительная подсистема безопасности хочет связать токен с процессом, чтобы мы могли выполнить проверку безопасности позже.

Структура, которую ядро ​​использует для отслеживания процесса, - это KPROCESS. Структура, которую исполнительные подсистемы используют для отслеживания, это EPROCESS. В качестве детали реализации, KPROCESS является первым полем EPROCESS, поэтому исполнительные подсистемы распределяют структуру EPROCESS и затем вызывают ядро ​​для инициализации ее части KPROCESS. В конце концов, обе структуры являются частью объекта процесса, который представляет экземпляр пользовательского процесса. Это также должно быть рассмотрено в книге Windows Internals.

-Скотт

5 голосов
/ 26 апреля 2011

Посмотрите здесь:

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

EPROCESS - это эквивалент режима ядра * PEB из пользовательского режима.Более подробную информацию можно найти в этом документе на сайте Алекса Ионеску, а также в книге Шрайбера и других книгах о внутренностях NT.

Используйте dt вWinDbg, чтобы понять, как они выглядят.

1 голос
/ 04 мая 2011

EPROCESS недоступен в пользовательском режиме.Ни KPROCESS.

KPROCESS является подмножеством EPROCESS.Если вы посмотрите на поля в отладчике, то увидите, что KPROCESS содержит поля, более связанные с планированием и ведением учета процесса на более низком уровне, в то время как EPROCESS имеет контексты процесса более высокого уровня внутри него.Насколько мне известно, имена происходят из разных подсистем, которые взаимодействуют с этими структурами (в исполнительной системе структуры и функции часто имеют префикс Ex, а в ядре - структуры и функции, часто префикс Ke)

Вы можетеувидеть это в разных документированных функциях.Рассмотрим прототип для KeStackAttachProcess (http://msdn.microsoft.com/en-us/library/ff549659(v=vs.85).aspx), который является функцией Ke и принимает KPROCESS.Не существует экспортированных и документированных функций Ex, которые принимают EPROCESS (или KPROCESS), но функции Ps полностью работают с EPROCESSES.

Аналогичное разделение существует для потоков с KTHREAD и ETHREAD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...