Lister les services Windows

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);