Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 从任务管理器防止进程终止,已反转_Windows_Delphi_Taskmanager - Fatal编程技术网

Windows 从任务管理器防止进程终止,已反转

Windows 从任务管理器防止进程终止,已反转,windows,delphi,taskmanager,Windows,Delphi,Taskmanager,我使用下面的代码来防止用户从Task Manager杀死我的程序(我在某处找到了它): 它工作得很好,但在我的程序中的某个时候,我需要恢复效果,并允许从任务管理器关闭。 有什么想法吗?调用SetSecurityInfo时,您正在修改DACL。所以,在调用GetSecurityInfo并记录原始进程DACL之前。到时候,再次调用SetSecurityInfo以恢复它 请注意,一个确定的用户也可以这样做,这样您就不能阻止他们终止进程。你只是让它有点尴尬。我终于找到了。我可以调用SetSecurity

我使用下面的代码来防止用户从Task Manager杀死我的程序(我在某处找到了它):

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

调用SetSecurityInfo时,您正在修改DACL。所以,在调用GetSecurityInfo并记录原始进程DACL之前。到时候,再次调用SetSecurityInfo以恢复它


请注意,一个确定的用户也可以这样做,这样您就不能阻止他们终止进程。你只是让它有点尴尬。

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

我需要哪些用途?您询问了如何还原所做的更改。这里概述的方法不能做到这一点。因此,它并没有回答您提出的问题。而且,它不仅没有恢复更改,而且授予所有人完全访问权限。请阅读以下内容:
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;