Bonjour à tous !
J'essaye au travers de ce code ci-dessous, de récupérer la liste des services sur une machine locale.Cependant j'ai un souci pour trouver la taille nécessaire de la variable dwBufSize

Constructeur :
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
Services::Services()//constructeur
{
    //variables
       dwBufSize=0;
       dwrest = 0;
       dwrsmhndl=0;
       dwSvrCount = 0;
       pessp =0;
       pqsc = 0;
       buffer = (char*) VirtualAlloc(0,8192,MEMDISPO,PAGE_READWRITE);
    //allocation mémoire 
    pessp = (LPENUM_SERVICE_STATUS_PROCESS) (buffer + 1024); // 3 Ko dispo
    pqsc = (LPQUERY_SERVICE_CONFIG) (buffer + 4096); // 4 Ko dispo 
    handleServices =OpenSCManager(0,0,SC_MANAGER_ENUMERATE_SERVICE);

}
Ma fonction:
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
33
34
35
36
37
38
39
char* Services::getServices(int i)
{
   
    //variable de mon .h
   /* SC_HANDLE handleServices ;
    DWORD dwrest, dwrsmhndl, dwSvrCount, bok;
    DWORD dwBufSize; // la varible 
    LPENUM_SERVICE_STATUS_PROCESS pessp ;
    LPQUERY_SERVICE_CONFIG pqsc ;
    char * buffer;*/ 

    if(!buffer) 
     {
       perror("ERREUR_BUFFER");
       exit(0);
     }

    
    if(!handleServices)
    {
        dwerror = GetLastError();
        printf("Erreur handle de services : %s\n",dwerror);
    }
    
    bok = EnumServicesStatusEx(handleServices, 
                                   SC_ENUM_PROCESS_INFO,
                                   SERVICE_WIN32 | SERVICE_DRIVER,
                                   SERVICE_STATE_ALL,
                                   (byte*)pessp,
                                   dwBufSize,
                                   &dwrest,
                                   &dwSvrCount,
                                   NULL,
                                   NULL);
     
      
     return (char*)pessp[i].lpDisplayName ;

}