gpt4 book ai didi

c++ - 如何停止应用程序执行

转载 作者:行者123 更新时间:2023-11-27 23:34:38 24 4
gpt4 key购买 nike

我正在从事一个项目,以防止从可移动设备启动应用程序。有谁知道我该怎么做?最好在 Windows 平台上使用 C++。

我的目标是防止执行 exe 文件,即使用户双击它或者即使他试图从命令行启动它也是如此。

最佳答案

假设您希望停止从可移动驱动器启动的任何进程,这似乎是一个 shell Hook 的应用程序。半小时写了下面的代码,测试好像OK。请记住,编写 Hook 是一个非常重要的过程,全局 Hook 需要编写 DLL。这是钩子(Hook) 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 key 启动的任何应用程序。

请注意,此解决方案适用于所有 GUI 进程(即非控制台),但要求它们在顶级窗口上响应 WM_CLOSE。更激进的通用解决方案可能需要您将 hwnd 解析为 hprocess 并调用 TerminateProcess:我提供的解决方案是“更友好”(链接的 DLL 将被卸载等),但不太通用。

如果您想了解编写系统范围钩子(Hook)的基础知识,可以在我的网站上找到它们 here .请注意,上面的代码不是生产质量代码,我将它黑进了我周围的旧 ANSI dll,因此缺乏对 Unicode 的支持,或者任何接近体面的调试能力的东西。不过,它展示了基本思想。

关于c++ - 如何停止应用程序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com