2010-04-11 4 views
1

Y a-t-il un moyen de faire en sorte que le thread se connecte à son propre processus indépendant? Je sais qu'il y a la fonction CreateProcess mais pour autant que je sache, vous ne pouvez utiliser que des applications externes. Est ce que je demande du tout possible?Fil C++ pour séparer le processus

Répondre

3

Ce n'est pas possible sous Windows. Sur les plates-formes Posix, l'effet souhaité pourrait être atteint par fork() ing.

+0

Est-ce que 'fork()' ne fonctionne pas sous Windows? – sbi

+1

Je crois Cygwin fournit une implémentation, aussi cette réponse donnée par Jed Smith est un peu plus perspicace que le mien: http://stackoverflow.com/questions/1814903/running-fork2-from-windows-with-cygwin-possible –

+1

Le Le noyau Windows sait comment 'fork()' mais, autant que je sache, ce n'est pas accessible directement via l'interface Win32. Vous devez utiliser une autre API telle que "Services pour Unix" (http://technet.microsoft.com/en-us/library/bb496506.aspx) ou Cygwin (http://www.cygwin.com/). –

3

C'est possible.

Vous pouvez appeler CreateProcess avec une application factice et avec le drapeau CREATE_SUSPENDED donc il ne fonctionne pas immédiatement. Vous pouvez ensuite utiliser VirtualAllocEx pour allouer de l'espace mémoire dans le processus créé et WriteProcessMemory pour y écrire du code et des données. Et puis relâchez le processus pour l'exécuter.

Vous pouvez également utiliser CreateRemoteThread pour créer un processus s'exécutant dans le contexte d'un autre processus existant.

Donc ce que vous voulez faire est possible, mais ce n'est vraiment pas une chose simple à faire dans un environnement Windows, donc vous devriez avoir une très bonne raison de vouloir le faire.