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 :
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 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); }
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 ; }
Partager