Del*_*Boy 2 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;
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但在我的程序中的某些时候,我需要恢复效果并允许从任务管理器关闭.有任何想法吗?
您在调用SetSecurityInfo时正在修改DACL.因此,在您执行此操作之前,请调用GetSecurityInfo并记下原始进程DACL.到时候,再次调用SetSecurityInfo来恢复它.
请注意,确定的用户也可以执行此操作,因此您无法阻止他们终止该进程.你只是让它有点尴尬.