Предполагая, что вы хотите остановить запуск ЛЮБОГО процесса со съемного диска, это похоже на приложение для ловушки оболочки. Я написал следующий код за последние полчаса, и, похоже, он прошел проверку нормально. Имейте в виду, что написание ловушки - нетривиальный процесс, а глобальная ловушка требует написания библиотеки DLL. Это соответствующие внутренности DLL-перехватчика:
BOOL __declspec(dllexport) __stdcall InstallShellHook ()
{
lpfnHookProc = (HOOKPROC) ShellFunc ;
BOOL bRetVal = FALSE;
if (hShellHook == NULL)
{
hShellHook = SetWindowsHookEx (WH_SHELL,
lpfnHookProc,
hInstance,
NULL);
return TRUE;
}
return FALSE;
}
LRESULT CALLBACK ShellFunc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND hWndNew;
char szBuff [_MAX_PATH];
char szDrive [_MAX_DRIVE];
switch (nCode)
{
case HSHELL_WINDOWCREATED:
hWndNew = (HWND)wParam;
GetWindowModuleFileName (hWndNew, szBuff, _MAX_PATH);
_splitpath (szBuff, szDrive, NULL, NULL, NULL);
if (GetDriveType (szDrive) == DRIVE_REMOVABLE)
{
PostMessage (hWndNew, WM_CLOSE, 0, 0);
}
break;
default:
break;
}
return 0;
}
Я протестировал этот код, установленный из простого диалогового тестового стенда, и он позволяет мне запускать любое оконное приложение с моего жесткого диска, но немедленно закрывает все, что я запускаю с USB-ключа.
Обратите внимание, что это решение работает для всех процессов графического интерфейса пользователя (т.е. неконсольных), но требует, чтобы они отвечали на WM_CLOSE в окне верхнего уровня. Более агрессивное общее решение, вероятно, потребует от вас преобразовать hwnd в hprocess и вызвать TerminateProcess: решение, которое я предоставил, является «более добрым» (связанные библиотеки DLL будут выгружены и т. Д.), Но менее общее.
Если вы хотите узнать основы написания общесистемной ловушки, вы можете найти их на моем веб-сайте здесь. Обратите внимание, что приведенный выше код не является производственным качеством, я взломал его в старую DLL-библиотеку ANSI, которая у меня была, отсюда отсутствие поддержки Unicode или чего-либо, приближающегося к приличным возможностям отладки. Тем не менее, он показывает основную идею.
person
Bob Moore
schedule
10.11.2009