繁体   English   中英

防止从任务管理器中终止进程

[英]Prevent Process Kill From Task Manager, Reversed

我使用下面的代码来防止用户从任务管理器中杀死我的程序(我在某处找到它):

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;

效果很好,但是在程序中的某个时刻,我需要恢复效果并允许从任务管理器关闭。 有任何想法吗?

当您调用SetSecurityInfo时,您正在修改DACL。 因此,在执行此操作之前,请调用GetSecurityInfo并记下原始进程DACL。 时间到了,再次调用SetSecurityInfo来还原它。

请注意,确定的用户也可以执行此操作,因此您实际上无法阻止他们终止该进程。 您只是让它有点尴尬。

我终于找到了。 我可以调用SetSecurityInfo,传递nil而不是一个空的DACL。 似乎空的DACL表示“没有权限”,而空的DACL则表示“所有权限”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM