【问题标题】: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;

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

【问题讨论】:

  • 我需要哪些用途?

标签: windows delphi taskmanager


【解决方案1】:

当您调用 SetSecurityInfo 时,您正在修改 DACL。因此,就在您调用 GetSecurityInfo 并记下原始进程 DACL 之前。到时候再调用SetSecurityInfo来恢复。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多