En supposant que vous souhaitiez arrêter tout lancement de processus à partir d'un lecteur amovible, cela semble être une application pour un hook shell. J'ai écrit le code suivant au cours de la dernière demi-heure, et il semble tester OK. Gardez à l'esprit que l'écriture d'un hook est un processus non trivial, et qu'un hook global nécessite l'écriture d'une DLL. Ce sont les tripes pertinentes de la DLL crochet:
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;
}
J'ai testé ce code, installé à partir d'un banc d'essai simple, de dialogue, et cela me permet de lancer une application fenêtré de mon disque dur, mais se ferme immédiatement tout lancement I à partir d'une clé USB.
Notez que cette solution fonctionne pour tous les processus GUI (c'est-à-dire non-console), mais nécessite qu'ils répondent à WM_CLOSE sur une fenêtre de niveau supérieur. Une solution générale plus agressive vous obligerait probablement à résoudre le hwnd dans un hprocess et appelez TerminateProcess: la solution que j'ai fournie est "kinder" (les DLL liées seront déchargées etc.), mais moins générale.
Si vous voulez connaître les bases de l'écriture d'un hook à l'échelle du système, vous pouvez les trouver sur mon site Web here. Notez que ce qui précède n'est pas du code de qualité de production, je l'ai piraté dans une vieille DLL ANSI que j'avais à poser, d'où le manque de support pour Unicode, ou tout ce qui se rapproche de la capacité de débogage décent. Il montre cependant l'idée de base.
Votre utilisation du pluriel "applications" semblerait indiquer que vous voulez arrêter toute application en cours d'exécution à partir d'un lecteur amovible.Est-ce le cas, ou essayez-vous d'empêcher votre application à partir d'un lecteur amovible? Ma réponse ci-dessous suppose le premier plutôt que le dernier. –
IOW, vous voulez que votre application refuse de s'exécuter si elle réside sur un stockage amovible? –
Pas vraiment je veux juste arrêter les nouveaux exécutables qui peuvent essayer d'être lancés à partir de périphériques amovibles –