Добрый день, уважаемые. Есть следующие вопросы: 1) Какая разница между NtTerminateProcess и NtOpenProcess? В плане безопасности моего процесса. Что правильнее перехватывать? Насколько я заметил, при перехвате ОпенПроцесс процесс невозможно ни снять, ни усыпить, а при перехвате ТерминейтПроцесс-можно усыпить, но нельзя снять (использую Process Explorer)? 2) Почему при перехвате ОпенПроцесс я могу снять процесс командой taskkill /F /IM notepad.exe, а при перехвате Терминейт-нет? 3) Как при перехвате функции NtTerminateProcess получить ПИД завершаемого процесса? Ибо если в функции ОпенПроцесс есть параметр IN PCLIENT_ID, то ф-я Terminate принимает лишь __in_opt HANDLE ProcessHandle и __in NTSTATUS ExitStatus. Как по хендлу узнать ПИД из нулевого кольца? 4) И тупой вопрос:перехватывать нужно Zw или Nt функции? Повторюсь, драйвер режима ядра. Судя по инфе на сайте, нужны Нт.. Спасибо.
лучше хукать и то и то. запрещать открытие с процесс_терминейт и запрещать закрытие по существующему хендлу. референсишь объект по хендлу, получаешь PEPROCESS. дальше PsGetProcessId Перехватывать нужно NtXxx. ZwXxx - это врапперы для вызова соответствующих сервисов через KiSystemService.