Re[4]: Проблема с NtCreateUserProcess
От: BDEsoft  
Дата: 26.03.13 10:01
Оценка:
Здравствуйте, ononim, Вы писали:

O>>>Будьте чеснее — просто запускайте оригинальный процесс в suspended состоянии и тут же его киляйте при помощи NtTerminateProcess

BDE>>Это уже чтото. Теперь еще вопрос, как дождаться окончания запуска процесса в драйвере, не останавливая поток?
O>что значит "окончание запуска процесса" и зачем его дожидацца?

Сейчас проверил:

         ProcessParameters->Flags |= 0x00000004; //(CREATE_SUSPENDED)
         status = ((NtCreateUserProcess)RealNtCreateUserProcess) (ProcessHandle,
             ThreadHandle,
             Parameter2,
             Parameter3,
             ProcessSecurityDescriptor,
             ThreadSecurityDescriptor,
             Parameter6,
             Parameter7,
             ProcessParameters,
             Parameter9,
             pProcessUnKnow);
         if(status==STATUS_SUCCESS)
         {status = ZwTerminateProcess(*ProcessHandle, STATUS_SUCCESS); }
         DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_TRACE_LEVEL, "mhiv - FakedNtCreateUserProcess - %x", status);
         return  STATUS_SUCCESS;

В итоге получил диалоговое окно "Отказано в доступе к указанному устройству, ...". Т.е. не получается сразу закрывать процесс.

Здравствуйте, okman, Вы писали:

O>Здравствуйте, BDEsoft, Вы писали:


BDE>>А разве с помощью можно отменить создание процесса? Как я писал, мне нужно пользователю выдавать окно запроса, и отменять запуск (или по правилам)


O>Напрямую с помощью PsSetCreateProcessNotifyRoutine, конечно же, нельзя.

O>Но есть вариант — во время срабатывания данной функции поставить запуск процесса "на паузу",
O>уведомить юзермодное приложение, а затем либо возобновить запуск, либо прибить новый
O>процесс через ZwTerminateProcess.

Попробую покопать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.