防止从任务管理器中杀死进程,反转
Posted
技术标签:
【中文标题】防止从任务管理器中杀死进程,反转【英文标题】:Prevent Process Kill From Task Manager, Reversed 【发布时间】:2013-06-23 05:55:34 【问题描述】:我使用下面的代码来防止用户从任务管理器中杀死我的程序(我在某处找到它):
function PreventProcessKill: Integer;
var
hProcess:Thandle;
EmptyDacl: TACL ;
pEmptyDacl: PACL ;
dwErr : DWORD ;
begin
hProcess := GetCurrentProcess();
ZeroMemory(@EmptyDacl, SizeOF(tacl));
pEmptyDacl := @EmptyDacl;
if (not InitializeAcl(EmptyDacl, sizeof(tACL), 2)) then dwErr := GetLastError()
else dwErr := SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil,
@EmptyDacl, nil);
Result:= dwErr;
end;
效果很好,但在我的程序中的某个时刻,我需要恢复效果并允许从任务管理器关闭。 有什么想法吗?
【问题讨论】:
我需要哪些用途? 【参考方案1】:当您调用 SetSecurityInfo 时,您正在修改 DACL。因此,就在您调用 GetSecurityInfo 并记下原始进程 DACL 之前。到时候再调用SetSecurityInfo来恢复。
请注意,确定的用户也可以执行此操作,因此您实际上无法阻止他们终止进程。你只是让它有点尴尬。
【讨论】:
【参考方案2】:我终于找到了。我可以调用 SetSecurityInfo,传递 nil 而不是空的 DACL。似乎空 DACL 表示“无权限”,空 DACL 表示“所有权限”。
【讨论】:
您询问了如何恢复所做的更改。此处概述的方法并没有做到这一点。因此它没有回答您提出的问题。 更重要的是,它不仅不会还原更改,它还授予所有人完全访问权限。阅读:msdn.microsoft.com/en-us/library/windows/desktop/ms717798.aspx以上是关于防止从任务管理器中杀死进程,反转的主要内容,如果未能解决你的问题,请参考以下文章