从任务管理器阻止进程终止,反向

时间:2013-06-23 05:55:35

标签: windows delphi taskmanager

我使用下面的代码来阻止用户从任务管理器中删除我的程序(我发现它在某处):

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;

它运行良好,但在我的程序中的某些时候,我需要恢复效果并允许从任务管理器关闭。 有什么想法吗?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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