Un petit bout de code pour lister les services (et donc pilotes) Windows…
les retours de fonctions EnumServicesStatusEx
ne sont pas vérifiés…
SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE); if (hSCM != NULL) { DWORD dwEnumSizeNeeded; DWORD dwServicesCount; BYTE * bufferServiceState; EnumServicesStatusEx(hSCM, SC_ENUM_PROCESS_INFO, SERVICE_TYPE_ALL, SERVICE_STATE_ALL, NULL, 0, &dwEnumSizeNeeded, &dwServicesCount, NULL, NULL); bufferServiceState = new BYTE[dwEnumSizeNeeded]; EnumServicesStatusEx(hSCM, SC_ENUM_PROCESS_INFO, SERVICE_TYPE_ALL, SERVICE_STATE_ALL, bufferServiceState, dwEnumSizeNeeded, &dwEnumSizeNeeded, &dwServicesCount, NULL, NULL); ENUM_SERVICE_STATUS_PROCESS * pEnumStatus = reinterpret_cast<ENUM_SERVICE_STATUS_PROCESS *>(bufferServiceState); for(DWORD i = 0; i < dwServicesCount; i++) { wcout << pEnumStatus[i].lpServiceName << L'\t' << pEnumStatus[i].lpDisplayName << endl; } delete[] bufferServiceState; } CloseServiceHandle(hSCM);