Bonjour,
Sous C++Builder XE4, je n'arrive pas à récupérer la liste des services.
Voici une partie de mon code de test.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 bool __fastcall TGestionService1::ConnectToServiceManager(UnicodeString ComputerName, SC_HANDLE__ **SCHandle) { *SCHandle = OpenSCManager(ComputerName.w_str(), NULL, SC_MANAGER_ALL_ACCESS); return (*SCHandle != NULL); }Dans tous les cas, je récupère la valeur "RPC_X_BAD_STUB_DATA" avec la fonction "EnumDependentServices".
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
40
41 SC_HANDLE__ *Handle_SCM; UnicodeString ComputerName = MyGetComputerName(); ENUM_SERVICE_STATUS *Mes_Services; unsigned long OctetsNecessaires, Nombre_Services; try { if (ConnectToServiceManager(ComputerName, &Handle_SCM)) { Mes_Services = new ENUM_SERVICE_STATUS[512]; if (EnumDependentServices(Handle_SCM, SERVICE_STATE_ALL, Mes_Services, size_t(Mes_Services), &OctetsNecessaires, &Nombre_Services) != false) { //Code de récupération } else { int test = GetLastError(); MessageDlg(IntToStr((int)test), System::Uitypes::TMsgDlgType::mtInformation, TMsgDlgButtons(), 0); if (test == ERROR_ACCESS_DENIED) { test = ERROR_ACCESS_DENIED; } if (test == ERROR_INVALID_HANDLE) { test = ERROR_INVALID_HANDLE; } if (test == ERROR_INVALID_PARAMETER) { test = ERROR_INVALID_PARAMETER; } if (test == ERROR_MORE_DATA) { test = ERROR_MORE_DATA; } if (test == RPC_X_BAD_STUB_DATA) { test = RPC_X_BAD_STUB_DATA; } } } } __finally { //...
J'ai vu que ce problème est reconnu par Microsoft mais pour les anciennes versions de Windows. J'utilise Windows 7 64bits.
http://smallbusiness.support.microso...n-au/kb/822751
Avez-vous une solution ?
Merci.
Partager