Introduction List out all of the installed Windows Services In C++ The code Code: #include <windows.h> #include <iostream.h> void ErrorDescription(DWORD p_dwError); using namespace std; int main() { SC_HANDLE hHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (NULL == hHandle) { ErrorDescription(GetLastError()); return -1; } else { cout << "Open SCM sucessfully" << endl; } ENUM_SERVICE_STATUS service; DWORD dwBytesNeeded = 0; DWORD dwServicesReturned = 0; DWORD dwResumedHandle = 0; DWORD dwServiceType = SERVICE_WIN32 | SERVICE_DRIVER; // Query services BOOL retVal = EnumServicesStatus(hHandle, dwServiceType, SERVICE_STATE_ALL, &service, sizeof(ENUM_SERVICE_STATUS), &dwBytesNeeded, &dwServicesReturned, &dwResumedHandle); if (!retVal) { // Need big buffer if (ERROR_MORE_DATA == GetLastError()) { // Set the buffer DWORD dwBytes = sizeof(ENUM_SERVICE_STATUS) + dwBytesNeeded; ENUM_SERVICE_STATUS* pServices = NULL; pServices = new ENUM_SERVICE_STATUS [dwBytes]; // Now query again for services EnumServicesStatus(hHandle, SERVICE_WIN32 | SERVICE_DRIVER, SERVICE_STATE_ALL, pServices, dwBytes, &dwBytesNeeded, &dwServicesReturned, &dwResumedHandle); // now traverse each service to get information for (unsigned iIndex = 0; iIndex < dwServicesReturned; iIndex++) { cout << TEXT("Display Name") << (pServices + iIndex)->lpDisplayName << TEXT('\t'); cout << TEXT("Service Name") << (pServices + iIndex)->lpServiceName << endl; } delete [] pServices; pServices = NULL; } // there is any other reason else { ErrorDescription(GetLastError()); } } if (!CloseServiceHandle(hHandle)) { ErrorDescription(GetLastError()); } else { cout << "Close SCM sucessfully" << endl; } return 0; } // get the description of error void ErrorDescription(DWORD p_dwError) { HLOCAL hLocal = NULL; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, p_dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),(LPTSTR)&hLocal, 0, NULL); MessageBox(NULL, (LPCTSTR)LocalLock(hLocal), TEXT("Error"), MB_OK | MB_ICONERROR); LocalFree(hLocal); }