Bonjour,

J'ai voulu testé les codes donnés dans les pages suivantes du MSDN :
http://msdn.microsoft.com/en-us/library/ms682623.aspx
http://msdn.microsoft.com/en-us/library/ms682050.aspx


Problème : la fonction EnumProcesses provoque une erreur de segmentation.


J'ai fait un code minimaliste que je compile avec Codeblocks 10.5 (et donc MinGW) sous Windows XP :
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
#include <windows.h>
#include <psapi.h>
#include <iostream>

int main( void )
{
    // Get the list of process identifiers.
    DWORD aProcesses[10000] = {0}, cbNeeded = 0;

    try
    {
        if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        {
            return 1;
        }
    }
    catch(const std::exception & Exp)
    {
        std::cerr << "Erreur : " << Exp.what() << ".\n";
        exit(EXIT_FAILURE);
    }
    return 0;
}
Le Try Catch ne sert à rien puisque la sortie est vide.

Par acquis de conscience, je fais un code similaire 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
#include <windows.h>
#include <psapi.h>
#include <stdio.h>

int main( void )
{
    // Get the list of process identifiers.
    DWORD aProcesses[10000] = {0}, cbNeeded = 0;

    puts("Avant");

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    {
        puts("Erreur lors du listing !");
        return 1;
    }

    puts("Apres");
    return 0;
}
qui ne m'affiche que Avant.

J'enquête à partir de la page de manuel de la fonction EnumProcesses : http://msdn.microsoft.com/en-us/library/ms682629.aspx

Elle semble fonctionner sous XP, j'ai ajouté Psapi.lib à mon projet. Définir ou pas PSAPI_VERSION=1 ne change rien.

Je suis preneur de toute piste ! Merci d'avance !