> Как в режиме ядра получить адрес блока EPROCESS процесса > system idle? Ну в общем это я издеваюсь - не обессудьте :-))
Может так:
status = PsLookupProcessByProcessId(0, &pEprocess);
Аргументы, думаю, понятны. Экспортируется из ntoskrnl.exe
Если нужен System, то он скорее всего сразу за ним в списке:
pSystem = CONTAINING_RECORD(pIdle->ProcessListEntry, EPROCESS, ProcessListEntry);
Хотя и не проверял, но скорее всего так
[NT] Именно Idle03.02.03 17:55 Автор: AAS Статус: Незарегистрированный пользователь
> > Как в режиме ядра получить адрес блока EPROCESS > процесса > > system idle? > Ну в общем это я издеваюсь - не обессудьте :-)) > Может так: > > status = PsLookupProcessByProcessId(0, &pEprocess); > > Аргументы, думаю, понятны. Экспортируется из ntoskrnl.exe > Если нужен System, то он скорее всего сразу за ним в > списке: > pSystem = CONTAINING_RECORD(pIdle->ProcessListEntry, > EPROCESS, ProcessListEntry); > Хотя и не проверял, но скорее всего так
Нет, PsLookupProcessByProcessId здесь не кактит, лично проверял, в кольцевом списке активных процессов его нет. А с процессом System все проще: в ntoskrnl экспортируется переменная PsInitialSystemProcess, это и есть укзатель на EPROCESS System.
[NT] У меня на время возникла идея потрейсить NtQuerySystemInformation03.02.03 21:50 Автор: amirul <Serge> Статус: The Elderman
По крайней мере в Task Managere Idle присутствует, так что этой самой кверей он возвращается (можно и прогу написать для проверки, но мне лениво). А трейсить его можно для того, чтоб найти как он перечисляет процессы. Не думаю что тело основного цикла там сильно большое. Или можно не трейсить, а в ida-у загнать ntoskrnl и смотреть там. А лучше всего совместно.
Но потом сам не захотел долбаться :-)))
Если никто больше ничего не предложит - можешь воспользоваться как крайним вариантом :-)))