1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
bloquerKill ( GetCurrentProcessId );
function bloquerKill (pid : integer) : cardinal;
var
hpWriteDAC : THandle;
pdacl : PACL;
ea : EXPLICIT_ACCESS;
dwErr : DWORD;
users : string;
begin
hpWriteDAC := OpenProcess(WRITE_DAC, false, pid);
users := getstrUserName;
ea.grfAccessPermissions := STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $0FFF;
ea.grfAccessMode := DENY_ACCESS;
ea.grfInheritance := NO_INHERITANCE;
ea.Trustee.pMultipleTrustee := nil;
ea.Trustee.MultipleTrusteeOperation := NO_MULTIPLE_TRUSTEE;
ea.Trustee.TrusteeForm := TRUSTEE_IS_NAME;
ea.Trustee.TrusteeType := TRUSTEE_IS_WELL_KNOWN_GROUP;
ea.Trustee.ptstrName := PChar(@users[1]);
pdacl := nil;
dwErr := SetEntriesInAcl(1, @ea, nil, pdacl);
if dwErr<>0 then RaiseLastOSError;
dwErr := SetSecurityInfo(hpWriteDAC, winapi.AccCtrl.SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil,pdacl, nil);
if dwErr<>0 then RaiseLastOSError;
LocalFree(THAndle(pdacl));
CloseHandle(hpWriteDAC);
end; |