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 :

recuperer Id de processus


Sujet :

Threads & Processus C++

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 64
    Par défaut recuperer Id de processus
    bonsoir,

    mon probléme est le suivant : je suis sous visuel c++ 2005 express edition je dois creer une fonction qui prend en argument le numero d'un port et qui retourne le Id du processus associé.j'ai déjà poster ce probleme mais la réponse que j'ai eu c'été d'utiliser la methode "GetExtendedTcpTable" ,mon probleme c'est que j'ai pas su l'utiliser meme avec un exemple que j'ai trouvé sur un site quand je compile il me donne rien ,svp si vous pouvez m'aider a creer cette fonction je serai reconnaissant .merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    Salut

    Est que tu utlise MFC.

    Si Oui tu peux utiliser le class Handle

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Donne des précisions sur ce qui se passe (ou pas) quand tu cherches à utiliser GetExtendedTcpTable().
    Poste ton code, aussi.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 64
    Par défaut
    bonjour,

    merci pour vos proposition et pour votre rapidité aussi,en fait j'utilise pas les MFC ,en ce qui concerne le code voilà le code que j'ai trouvé dans un site web juste pour vous donnez une idée car il est en C# :
    **********************************************************
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public void GetTcpConnections()
    {
      int AF_INET = 2; // IP_v4
      int res = IPHlpAPI32Wrapper.GetExtendedTcpTable(buffer, out buffSize, 
                true, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0);
      if (res != Utils.NO_ERROR) //If there is no enouth memory to execute function
      {
        buffer = new byte;
        res = IPHlpAPI32Wrapper.GetExtendedTcpTable(buffer, out buffSize, 
              true, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0);
        if (res != Utils.NO_ERROR)
        {
          return;
        }
      }
      int nOffset = 0;
      int NumEntries = Convert.ToInt32(buffer[nOffset]);
      nOffset += 4;
      for (int i = 0; i < NumEntries; i++)
      {
        TCPUDPConnection row = new TCPUDPConnection();
        // state
        int st = Convert.ToInt32(buffer[nOffset]);
        // state by ID
        row.iState = st;
        nOffset += 4;
        row.Protocol = Protocol.TCP;
        row.Local = Utils.BufferToIPEndPoint(buffer, ref nOffset, false);
        row.Remote = Utils.BufferToIPEndPoint(buffer, ref nOffset, true);
        row.PID = Utils.BufferToInt(buffer, ref nOffset);
        this.Add(row);
      }
    *******************************************************

    pour plus d'information ya le lien suivant :

    http://www.codeproject.com/KB/IP/iphlpapi2.aspx


    dans leurs application(de ce site) ils recuperent l'adresse source et le port soure et l'adresse destination et le port destination et le ID du processus associé.

    svp aidez moi a faire marché ce code en vc++,et le mettre dans le corp d'une fonction qui prend en argument le num du port et qui retourne le ID du processus associé ,dans le plus proche possible.

    pous pouvez aussi m'envoyer des codes sur ma boite:

    goodlife01@hotmail.fr

    merci d'avance


    }

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut

    Je te conseillerais plutôt d'utiliser directement la fonction sans exemple de codes, car ça n'a pas l'air de s'éloigner de ce qui se fait habituellement sous Windows.

    De plus, ce code C# m'a l'air incomplet. (il y a sûrement des crochets dans le "new byte;")
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 64
    Par défaut
    salut,

    oui,mais l'utilisation de cette fonction n'est pas evidente et en plus ya pas un exemple dans la "msdn" donc s'il ya des coups de pouss je serai reonnaissant.merci

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ça m'a pourtant l'air assez simple:
    1. Un appel avec un buffer NULL et une taille zéro, pour obtenir la taille de buffer nécessaire:
      Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      BYTE * buf = NULL;
      DWORD size = 0;
      DWORD err = GetExtendedTcpTable(buf, &size, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
      if(err == NO_ERROR)
      {
      	puts("Nothing to see here");
      	return;
      }
      else if(err != ERROR_INSUFFICIENT_BUFFER)
      {
      	printf("Unexpected error %lu requesting TCP info size\n", err);
      	return;
      }
    2. Un appel avec un buffer et une taille correcte:
      Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      buf = new BYTE[size];
      err = GetExtendedTcpTable(buf, &size, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
      if(err != NO_ERROR)
      {
      	printf("Error %lu retrieving TCP information\n", err);
      	return;
      }
    3. Et maintenant, on peut lire le buffer:
      Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      MIB_TCPTABLE_OWNER_PID * pData = reinterpret_cast<MIB_TCPTABLE_OWNER_PID *>(buf);
      /* Lire la structure pointée par pData */
      ...
    4. Et ne pas oublier le delete à la fin:
      Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      delete[] buf;
      buf=NULL, pData=NULL;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 64
    Par défaut
    bonjour,

    merci pour ton aide c'est vraiment gentil,j'ai tester le code que vous m'avez donné comme suit :


    #include "stdafx.h"
    #include<windows.h>
    #using<System.dll>
    #using<Iphlpapi.dll>

    int main()
    {

    BYTE * buf = NULL;
    DWORD size = 0;
    DWORD err = GetExtendedTcpTable(buf, &size, true, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
    if(err == NO_ERROR)
    {
    puts("Nothing to see here");
    return 0;
    }
    else if(err != ERROR_INSUFFICIENT_BUFFER)
    {
    printf("Unexpected error %lu requesting TCP info size\n", err);
    return 0;
    }


    buf = new BYTE[size];
    err = GetExtendedTcpTable(buf, &size, true, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
    if(err != NO_ERROR)
    {
    printf("Error %lu retrieving TCP information\n", err);
    return 0;
    }

    MIB_TCPTABLE_OWNER_PID * pData = reinterpret_cast<MIB_TCPTABLE_OWNER_PID *>(buf);

    delete[] buf;
    buf=NULL, pData=NULL;
    return 0;

    }

    avant que j'ajoute le "#using<Iphlpapi.dll>" il connaissait pas la fonction GetExtendedTcpTale et autre identificateur mais mantenant il donne une seule erreur :



    .\extended.cpp(7) : fatal error C1107: could not find assembly 'Iphlpapi.dll': please specify the assembly search path using /AI or by setting the LIBPATH environment variable
    Build log was saved at "file://c:\Documents and Settings\gone\Mes documents\Visual Studio 2005\Projects\extended\extended\Debug\BuildLog.htm"
    extended - 1 error(s), 0 warning(s)

    j'ai trouvé un 'Iphlpapi.dll' dans projet realisé avec c# je sait est ce que ça va marché et si oui où doit je le mettre? sachant que déjà j'ai la PSDK installée et qui contient "Iphlpapi.h" et "Iphlpapi.lib" .merci pour toute proposition

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 64
    Par défaut
    bonjour,

    hého ya pas encore une réponse ? j'attend toujours vos propositions et réponses,merci

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 64
    Par défaut
    bonsoir,

    ca va Mr Médinoc? est ce que ta reçu mon prob? j'attend toujours vos propositions je suis bloqué et j'ai besoin d'aide rapidement help!!! merci d'avance

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Désolé, c'est la première fois que je vois ce genre de problème dans une compilation C++ normale...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Recuperation argument processus
    Par ZeroZero dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/05/2007, 16h59
  2. Recuperer les processus du systeme ?
    Par kedare dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 06/04/2007, 21h21
  3. Réponses: 4
    Dernier message: 02/11/2005, 16h16
  4. Réponses: 10
    Dernier message: 13/05/2005, 12h08
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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