Externes Programm als Thread starten



  • Hallo,

    wie die Titel schon sagt, würde ich gerne ein externes Programm (*.exe) als Thread starten. Wie kann ich das erreichen, ich finde dazu leider nichts...



  • Zuerst müsstest du kurz sagen, wie wo was du das machen willst?
    Hast du das in einer .bat Datei oder in nem C++ Projekt oder wie genau willst du das machen?
    Oder verwechselst du nur Thread und Prozess?



  • Ich möchte in einem C++ Projekt einen zweiten Thread erstellen, in dem ein beliebiges anderes exe-Programm läuft.

    Für die eigentliche Frage nicht wichtig, aber wen es interessiert: Mir geht es darum, dass ich mit Hilfe von MS Detour die Registry-Aktionen (Lesen/Schreiben) des Programms hooke, um beliebige Programme portabel zu machen. Allerdings kann ich (meines Wissens nach) das Hooken nicht mit Hilfe einer Dll-Injection machen, weil ich dazu zuerst den Prozess starten muss und dann erst die Dll anhängen kann, zum hooken. Das würde bedeuten, dass mir beim Programmstart evtl Registry-Aktionen durch die Lappen gehen. Ich dachte mir, wenn ich jetzt meinen eigenen Prozess hooke und dann darin als Thread das Programm starte, hab ich das Problem gelöst



  • Gut 👍
    Für diesen Fall würde ich entweder auf die Thread/Multithread-Möglichkeiten von Boost verweisen -> http://www.boost.org/
    oder aber über die WinAPI

    DWORD WINAPI newThread(LPVOID data)
    {
            //deine exe hier starten
            return 0;
    }
    
    int main(){
    
        DWORD ThreadID;
        HANDLE hThread = CreateThread(0, 0, newThread, 0, 0, &ThreadID);
        //deine exe läuft jetzt parallel
        //weiterer Code...
    
        //alles fertig ist
        CloseHandle(hThread);
        return 0;
    }
    

    Damit habe ich mich mal versucht...das hat ganz gut geklappt 🙂

    Hoffe ich konnte die einen Denkanstoß geben 👍



  • Das Problem liegt halt in der zeile

    //deine exe hier starten

    Mir sind nur Möglichkeiten bekannt, bei denen das neue Programm einen eigenen Prozess erhält (z.B. system("sonstwas.exe") oder CreateProcess(...)). Ich brauch sie aber in meinem Prozess, sie darf nur einen eigenen Thread bekommen.



  • Mhh verstehe...habe jetzt leider keine Zeit das zu testen, aber würde das theoretisch funktionieren?:

    Du rufst in einem neuen Thread eine Funktion auf. Damit läuft diese Funktion nun parallel zum Hauptprogramm. Nun rufst du innerhalb deines Threads mit CreateProcess deine neue exe auf. Diese läuft dann als Hauptinstanz innerhalb dieses Threads, blockiert also nicht deine main() Funktion im Hauptprogrammablauf. Nun kannst du mehrere neue Threads starten, die ebenfalls die Funktion aufrufen, die dann neue exen starten...
    Das wäre jetzt spontan meine erste Idee. Weiß nicht ob es funktioniert...

    Bitte nicht schlagen wenns nicht geht 😃

    Viel Erfolg 😉



  • Schade, einen smiley mit Knüppel gibts hier leider nicht 😉 ...wobei, ichgentlich bin ich sowieso zu sanftmütig dafür...
    CreateProcess erstellt eben leider einen komplett neuen Prozess, was es ja nicht soll,...ich suche eine ähnlich Funktion, die das Programm in einen Thread des meinigen lädt...



  • Ich habe gerade noch eine andere Lösung für mein Problem gefunden.
    Ich habe harausgefunden, dass man den Prozess mit CreatProcess mit Hilfe des CREATE_SUSPENDED Flags so erstellen kann, dass er zwar existiert, das Programm aber noch nicht startet. So kann ich dann in den noch nicht gestarteten Prozess eine Dll-Injection machen und die Registry-Funktionen hooke,...
    Danke trotzdem für eure Mühe 👍


Anmelden zum Antworten