Hm. Irgendwo in meinem Code ist noch ein Fehler, denn auch als Gast kriege ich ein gültiges
Handle...
Programm 1:
Delphi-Quellcode:
program Project2;
uses
Forms,
Windows,
AclAPI,
AccCtrl,
sysutils,
dialogs,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const PROTECTED_DACL_SECURITY_INFORMATION = $80000000; //DACLs werden nicht vererbt
var desc: SECURITY_DESCRIPTOR;
begin
InitializeSecurityDescriptor(@desc, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDACL(@desc, false, nil, false);
Showmessage(SysErrorMessage(SetSecurityInfo(getCurrentProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION or PROTECTED_DACL_SECURITY_INFORMATION, nil, nil, desc.Dacl, nil)));
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Ich hoffe mal, dass ich da mit der
Api nicht ganz falsch liege. Auf Buttonklick wird eine Nachricht an ein zweites Programm mit geschickt, dabei wird die Adresse einer Variablen im WParam und das Hauptfensterhandle im LParam mitgeliefert.
Delphi-Quellcode:
procedure TForm1.rec(
var Message:TMessage);
var ProcId, ProcHandle: Cardinal; buffer, dummy: cardinal;
begin
getWindowThreadProcessId(
Message.LParam, ProcId);
ProcHandle:=OpenProcess(PROCESS_VM_WRITE
or PROCESS_VM_OPERATION, false, ProcID);
if ProcHandle=0
then
begin
showmessage('
Prozess-Handle ist Null!');
exit;
end;
showmessage('
Gueltiges Prozess-Handle');
try
buffer:=5;
WriteProcessMemory(ProcHandle, Pointer(
Message.WParam), @buffer, 4, dummy);
finally
closeHandle(ProcHandle);
end;
end;
Und ich kriege immer ein gültiges
Handle. Wo steckt der Fehler?