Я пишу минифильтр, чтобы заблокировать выполнение приложения. Minifilter запросит сканирование файлов на IRP_MJ_CREATE в приложениях usermode. Приложение usermode будет проверять, разрешать ли выполнение файла PE (.exe/.dll/etc) или нет.Minifilter: Заблокировать приложения с уведомлением
В настоящее время, когда приложения usermode говорят «нет», мини-фильтр выдаст статус отказа в доступе и отменит открытие файла. (Да, с помощью FltCancelFileOpen
)
Проблема при выдаче доступа Отказано возвращаемое значение, с точки зрения пользователя, они получат окно сообщения из системы, как это:
Другой пример, когда блокировать конкретные DLL из загружаемых, другой MessageBox появится:
То, что я хочу сделать это до сих пор отрицает открытым, но подавить окно сообщения и иметь уведомление о моем собственных, которая является удобным для пользователя ERR или сообщение о том, что приложения были заблокированы. Пример подобен функции smartscreen от Windows 8, которая будет уведомлять пользователя при запуске заблокированного exe без какого-либо сообщения с сообщением об отказе в доступе или подобном.
Как я могу это сделать?
Спасибо за понимание, я знаю об этом. Возможно, то, что я ищу, является чем-то, что завершает работу приложения до его запуска. Например, IIRC, PsSetImageNotify. –
Не похоже на работоспособный план - загрузка этой DLL происходит при блокировке загрузчика. Если загрузка будет успешной, DllMain будет выполняться под одной и той же блокировкой. Для завершения работы приложения вам потребуется блокировка загрузчика, так что он будет ждать завершения DllMain. (Я думаю, что Windows теперь уничтожит убегающие DllMains, но это не мгновенно) – MSalters
Просто мысль здесь, что я не совсем уверен в ее возможности ... Вы можете перенаправить библиотеку на другой файл своего собственного создания, пустой DllMain. Это позволит вызывающему думать, что он успешно загружен. У вас все еще есть проблема с тем, что пытается выполнить звонок, т. Е. GetProcAddress не будет работать. Это может позволить вам завершить процесс, прежде чем он сможет вызвать GetProcAddress. – lordjeb