阻止进程在任务管理器中关闭
嗨,大家好我正在编写一个小程序,以提高生产力。它应该断开用户与Internet的连接,或者在预设的分钟数后关闭计算机。该程序不应该与任务管理器关闭。我可以编译程序并运行,但我可以用任务管理器关闭它。我得到了我的灵感来自于这个页面 Prevent user process from being killed with "End Process" from Process Explorer阻止进程在任务管理器中关闭
#include <iostream>
#include <Windows.h>
#include <AccCtrl.h>
#include <AclAPI.h>
#include <tchar.h>
#include "shutdown.cpp"
#include "disconnect.cpp"
static const bool ProtectProcess()
{
HANDLE hProcess = GetCurrentProcess();
EXPLICIT_ACCESS denyAccess = {0};
DWORD dwAccessPermissions = GENERIC_WRITE|PROCESS_ALL_ACCESS|WRITE_DAC|DELETE|WRITE_OWNER|READ_CONTROL;
BuildExplicitAccessWithName(&denyAccess, _T("CURRENT_USER"), dwAccessPermissions, DENY_ACCESS, NO_INHERITANCE);
PACL pTempDacl = NULL;
DWORD dwErr = 0;
dwErr = SetEntriesInAcl(1, &denyAccess, NULL, &pTempDacl);
// check dwErr...
dwErr = SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pTempDacl, NULL);
// check dwErr...
LocalFree(pTempDacl);
CloseHandle(hProcess);
return dwErr == ERROR_SUCCESS;
}
int main()
{
using namespace std;
int abfrage;
ProtectProcess();
for (;;)
{
cout << "10.Cut your Internet connection" << endl
<< "11.Cut your Internet connection after 'x' minutes of surfing" << endl
<< "20.Shutdown" << endl;
cin >> abfrage;
switch(abfrage)
{
case 10: disconnectnow(); break;
case 11: disconnectlater(); break;
case 20: shutdown(); break;
default: cout << "nothing to see here" << endl;
}
}
return EXIT_SUCCESS;
}
此功能is, deliberately, unsupported and actively made intractable:
你为什么不能捕获了TerminateProcess?
如果用户触发了任务管理器,单击应用程序选项卡上结束任务按钮,Windows首先尝试很好地关闭你的程序,通过发送
WM_CLOSE
消息GUI程序和CTRL_CLOSE_EVENT
事件控制台程序。但是你没有机会拦截TerminateProcess
。为什么不?
TerminateProcess
是低级进程查杀功能。它绕过DLL_PROCESS_DETACH
和其他任何过程。当你用TerminateProcess
杀死时,在该进程中不会再运行用户模式代码。它消失了。不要过关。不要收200美元。如果你可以拦截
TerminateProcess
,那么你将会升级程序和用户之间的军备竞赛。假设你可以拦截它。那么,如果你想让你的程序无法运行,你只需交出你的TerminateProcess
处理程序!然后人们会要求“一种方法来杀死一个拒绝被TerminateProcess
杀死的进程”,我们会回到我们开始的地方。
实际上,试图逃避检测和任务kill的程序尝试将其自身重命名为Windows系统进程的近似形式。不要这样做。它保证你的程序将被提交为恶意软件,并会杀死你的信誉。
管理员将*总是*能够杀死你的程序,不是吗?并不会停止互联网连接,使您*少*生产力? – 2012-03-17 22:38:29
从任务管理器隐藏程序或防止它们被关闭是Windows出于显而易见的原因难以预防的原因。 – ChrisF 2012-03-17 22:39:01
@Carl Norum我经常需要阅读pdf才能学习,但互联网让我无法读书。它既不能与管理员也不能使用用户权限。 – AaronP 2012-03-17 22:50:52