Минифильтр: блокировка приложений с уведомлением

Я пишу минифильтр, чтобы заблокировать выполнение приложения. Минифильтр запросит сканирование файла в IRP_MJ_CREATE для приложений пользовательского режима. Приложение пользовательского режима проверяет, разрешено ли выполнение файла PE (.exe / .dll / etc) или нет.

В настоящее время, когда приложения пользовательского режима говорят «нет», минифильтр выдаст статус «Отказано в доступе» и отменит открытие файла. (Да, используя FltCancelFileOpen)

Проблема при выдаче возвращенного значения «отказано в доступе» заключается в том, что с точки зрения пользователя они получат окно сообщения из системы, например:
Windows не может получить доступ к указанному пути или файлу. У вас могут не быть соответствующих разрешений для доступа к элементу.

Другой пример, когда блокируется загрузка определенной библиотеки DLL, появляется другое окно сообщения:

Приложению не удалось запуститься правильно (0xc00000022)

Что я хочу сделать, так это запретить открывать, но подавить окно сообщения и получить собственное уведомление, которое представляет собой удобное сообщение об ошибке, указывающее, что приложения были заблокированы. Пример подобен функции Windows 8 smartscreen, которая уведомляет пользователя о запуске заблокированного exe без какого-либо сообщения, сообщающего, что доступ запрещен или аналогичен.
Windows 8 умный экран

Как я могу это сделать?

1

Решение

Давайте возьмем пример DLL. Вы получаете эту ошибку, потому что в Windows есть код, эквивалентный

if (!LoadLibrary(szDllName))
{
MessageBox("Application Error", ...);
}
else
{
DllMain = GetProcAddress("DllMain");
DllMain(DLL_PROCESS_ATTACH);

Итак, если вы не хотите, чтобы была взята первая ветвь кода, вам следует разрешить загрузку DLL. Там нет третьего варианта.

Пример Windows 8 вводит в заблуждение. Если вы Microsoft, конечно, вы можете добавить этот третий вариант.

[редактировать] Подумав, вы отменили операцию, используя FltCancelFileOpen ? Если нет, то как ты это сделал?

1

Другие решения


По вопросам рекламы [email protected]