IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Utilisation de CreateProcess()


Sujet :

Threads & Processus C++

  1. #1
    Membre habitu�
    Homme Profil pro
    Inscrit en
    D�cembre 2011
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9
    Par d�faut Utilisation de CreateProcess()
    Bonjour tout le monde!

    Je tente depuis hier de cr�er un processus avec CreateProcess, mais rien n'y fait, cela me renvoie une erreur (code 998).

    Voil� le code simplifi� en question :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <windows.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
     
    // THREAD PRIMARIA
    int main()
    {
     
        bool bStatus;
        STARTUPINFO si;
        PROCESS_INFORMATION NewProcess;
     
        bStatus = CreateProcessA("C:\\WINXP\\Process2.exe", NULL, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, "C:\\WINXP", &si, &NewProcess);
        if (!bStatus) printf ("Erro na criacao do Processo! Codigo = %d\n", GetLastError());
    }
    L'ex�cutable "Process2.exe" est un programme tout b�te que j'ai cr�� qui imprime "Hello World" et sleep durant 10 secondes. Je ne comprends pas pourquoi la cr�ation de processus ne marche pas.

    Quelqu'un a une id�e? J'ai des doutes sur le second argument de CreateProcess, j'ai essay� plusieurs choses en regardant sur le net, mais rien n'y fait. (derni�re pierre manquante pour que mon projet soit op�rationnel, je suis press� de d�couvrir quelle pourrait �tre l'erreur!)


    Merci d'avance


    Stochelo

  2. #2
    Membre chevronn�
    Inscrit en
    D�cembre 2010
    Messages
    290
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2010
    Messages : 290
    Par d�faut
    Tu n'initialises pas ta structure STARTUP_INFO.
    Comme sp�cifi� dans la doc (http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx), c'est un param�tre d'entr�e. C'est donc � toi de fournir quelque chose de coh�rent.
    Le cas pr�sent, ta structure si contient ce qui se trouve sur la pile au moment de l'appel, c'est � dire n'importe quoi. Tu as de la chance, ce n'importe quoi a provoqu� une erreur. Avec moins de chance, �a aurait pu marcher durant tests, et planter lamentablement en production.

    A ce que je vois rapidement, tu dois au moins remplir le champ dwFlags � 0 et le champ cb � sizeof(STARTUP_INFO).

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2010
    Messages
    872
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par d�faut
    L'API windows fournit aussi des fonctions permettant de conna�tre l'erreur. Voici un code que j'utilise :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DWORD   dwLastError = ::GetLastError();
    TCHAR   lpBuffer[256] = L"?";
     
    if(dwLastError != 0) {
      ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwLastError,
                              MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                              lpBuffer, sizeof(lpBuffer)-1, NULL);
      wcout << L"erreur: " << lpBuffer;
    }

  4. #4
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Citation Envoy� par phi1981 Voir le message
    A ce que je vois rapidement, tu dois au moins remplir le champ dwFlags � 0 et le champ cb � sizeof(STARTUP_INFO).
    Un gros +1

    l'erreur 998 signifie ERROR_NOACCESS ou encore "Invalid access to memory location."

    Probablement que l'appel CreateThread() tente de d�r�f�rencer quelque chose dans STARTUP_INFO et que, comme il y a n'importe quoi dedans, cela part en cacahu�tes.
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre habitu�
    Homme Profil pro
    Inscrit en
    D�cembre 2011
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9
    Par d�faut
    Citation Envoy� par phi1981 Voir le message
    Tu n'initialises pas ta structure STARTUP_INFO.
    Comme sp�cifi� dans la doc (http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx), c'est un param�tre d'entr�e. C'est donc � toi de fournir quelque chose de coh�rent.
    Le cas pr�sent, ta structure si contient ce qui se trouve sur la pile au moment de l'appel, c'est � dire n'importe quoi. Tu as de la chance, ce n'importe quoi a provoqu� une erreur. Avec moins de chance, �a aurait pu marcher durant tests, et planter lamentablement en production.

    A ce que je vois rapidement, tu dois au moins remplir le champ dwFlags � 0 et le champ cb � sizeof(STARTUP_INFO).
    Exactement cela, merci beaucoup! Obrigado!

  6. #6
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    @Stochelo : ne pas oublier le bouton si la r�ponse est correcte
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Utilisation de CreateProcess
    Par Faern dans le forum Threads & Processus
    R�ponses: 1
    Dernier message: 02/11/2010, 03h20
  2. Probl�me d'utilisation de CreateProcess
    Par Mister Nowis dans le forum Windows
    R�ponses: 4
    Dernier message: 22/03/2010, 11h34
  3. Utiliser Createprocess pour lancer une fonction
    Par lolita4882 dans le forum C++
    R�ponses: 3
    Dernier message: 14/03/2008, 12h01
  4. R�ponses: 5
    Dernier message: 14/02/2007, 17h06
  5. R�ponses: 2
    Dernier message: 05/04/2004, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo