Einzelnen Beitrag anzeigen

Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#1

CreateProcess und uallHook.InjectLibrary

  Alt 25. Mär 2008, 20:10
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
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat