Hallo Forum,
mal wieder eine Frage von mir.... Also, ich mache CreateProcess() und möchte dann mittels den schönen uall-Units eine
DLL einschleusen (uallHook.InjectLibrary()).
Mein Code sieht so aus:
Delphi-Quellcode:
procedure MyCreateProcess(Filename: string);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := 1;
CreateProcess(nil,
@Filename[1],
nil,
nil,
False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo);
uallHook.InjectLibrary(ProcessInfo.dwProcessId, 'D:\hook.dll');
end;
Funktioniert meistens auch, aber eben nicht immer. Als mir das aufgefallen ist, habe ich einfach die Funktion 10 mal mit 'notepad.exe' aufgerufen und 10 mal mit 'sndvol32.exe', einfach nur zum testen. Es kommt dann teilweise vor, dass der Prozess gar nicht mehr startet. Teilweise kommt überhaupt kein Fenster, oder das Programm startet (sndvol32), macht ein "Beep" (keine Ahnung warum) und ist dann auch weg, ohne ein Fenster anzuzeigen.
Vielleicht könnte man das Problem lösen, indem man vor InjectLibrary() ein Sleep oder so packt, aber das ist unsauber und hilft mir auch nicht wirklich weiter, das Problem zu verstehen. Ich vermute einfach mal, dass der Thread (von CreateRemoteThread) den Start des Programms (sndvol32/notepad) irgendwie durcheinander bringt.
Aber was kann man dagegen tun und wo genau liegt das Problem?
Würde mich sehr über Antworten freuen..
Gruß,
Alexander