Paylaşım için teşekkürler. Hoşuma giden bazı kodları delphiye çevirdim. Belki birilerinin işine yarar;
Uses
AclApi,accctrl,Tlhelp32;
procedure SetPermissions;
var
pDACL: PACL;
denyAccess: PEXPLICIT_ACCESS_A;
// R: DWORD;
ProcessHandle: HWND;
FProcessEntry32: TProcessEntry32;
dwAccessPermissions :DWORD ;//GENERIC_WRITE | PROCESS_ALL_ACCESS | WRITE_DAC | DELETE | WRITE_OWNER | READ_CONTROL;
begin
try
ProcessHandle:=OpenProcess(PROCESS_SET_INFORMATION , false, FProcessEntry32.th32ProcessID);
denyAccess := AllocMem(SizeOf(EXPLICIT_ACCESS));
dwAccessPermissions := GENERIC_WRITE and PROCESS_ALL_ACCESS and WRITE_DAC and WRITE_OWNER and READ_CONTROL;
BuildExplicitAccessWithName(denyAccess,'CURRENT_USER',dwAccessPermissions,DENY_ACCESS, NO_INHERITANCE);
SetEntriesInAcl(1, denyAccess, nil,pDACL);
SetSecurityInfo(ProcessHandle, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pDACL, nil);
{
R := SetEntriesInAcl(1, denyAccess, nil,pDACL);
if R = ERROR_SUCCESS then
begin
if SetSecurityInfo(ProcessHandle, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pDACL, nil) <> ERROR_SUCCESS then ShowMessage('SetNamedSecurityInfo failed: ' + SysErrorMessage(GetLastError));
LocalFree(Cardinal(pDACL));
end
else
ShowMessage('SetEntriesInAcl failed: ' + SysErrorMessage(R)); }
finally
LocalFree(Cardinal(pDACL));
SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);
CloseHandle(ProcessHandle);
end;
end;Procedure ErasePEHeaderFromMemory;
Var
OldProtect : dword ;
Begin
OldProtect := 0;
VirtualProtect(Pointer(400000),4096 ,PAGE_NOACCESS, @OldProtect);
End;