MinYoung Lee Ответов: 1

Перечисление идентификатора процесса в режиме ядра со структурой EPROCESS


Я хочу перечислить все идентификаторы процессов, запущенных в моей системе, используя структуру EPROCESS, но проблема здесь в том, что я не знаю, как получить доступ к полю UniqueProcessId в структуре EPROCESS. Теперь у меня есть указатель на структуру EPROCESS с помощью этой функции

Процесс PEPROCESS;
PsLookupProcessByProcessId(_ProcessID, & amp; Process);

и вычислил смещение поля UniqueProcessId, которое равно 0x0b4. Я попытался использовать этот код "*(Process+0x0b4(uniqueprocessid offset))", чтобы получить значение поля UniqueProcessId, но всегда он приносил неправильное и недопустимое значение/данные. Может ли кто-нибудь помочь мне узнать, как получить доступ к полю UniqueProcessId? Моя система-Windows7/x86. Заранее спасибо!

Что я уже пробовал:

-------------------------------------------------------------------------

1 Ответов

Рейтинг:
12

Jochen Arndt

Как это PEPROCESS определились?

Если у вас есть полная структура просто получите доступ к члену:

PVOID UniqueProcessId = Process->UniqueProcessId;

Если вы знаете смещение и тип, приведите Process к указателю byte или char добавьте смещение, приведите результат как указатель на тип поля и получите значение:
LPBYTE pUpi = ((LPBYTE)Process) + 0xb4;
// EDIT: Added missing *
//PVOID UniqueProcessId = *((PVOID)pUpi);
PVOID UniqueProcessId = *((PVOID*)pUpi);


MinYoung Lee

Это хорошо работает. Из-за недостатка знаний о "пойнтере" я боролся изо всех сил. Большое вам спасибо, Йохен Арндт!!

Jochen Arndt

Как вы могли заметить, даже я поначалу допустил ошибку.

Вы также можете поместить все это в одну строку инструкции, но это затрудняет понимание:
PVOID UniqueProcessId = *((PVOID*) ((LPBYTE)Process + 0xb4));

Спасибо вам за ваши отзывы и принятие моего решения.