Здравствуйте, 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.
Попробую покопать.