- #ifndef SAFEFREE
- # define SAFEFREE(x) if(x){ ::free((void *)x); x = NULL; }
- #endif
- ...
- TCHAR szServiceName[] = _T("myservice");
- SC_HANDLE hScm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- ENUM_SERVICE_STATUS *lpService = NULL;
- DWORD pcbBytesNeeded = 0;
- DWORD lpServicesReturned = 0;
- DWORD lpResumeHandle = 0;
- DWORD dwError = 0;
- if(!EnumServicesStatus(hScm, SERVICE_WIN32, SERVICE_ACTIVE, NULL, 0,
- &pcbBytesNeeded, &lpServicesReturned, &lpResumeHandle) ||
- (dwError = GetLastError() ) == ERROR_MORE_DATA)
- {
- DWORD dw_Bytes = pcbBytesNeeded + sizeof(ENUM_SERVICE_STATUS);
- lpService = (ENUM_SERVICE_STATUS *) malloc(dw_Bytes) ;
- lpResumeHandle=NULL ;
- if(!EnumServicesStatus(hScm, SERVICE_WIN32, SERVICE_ACTIVE, lpService, dw_Bytes,
- &pcbBytesNeeded, &lpServicesReturned, &lpResumeHandle) )
- {
- dwError = GetLastError();
-
- SAFEFREE(lpService) ;
- CloseServiceHandle(hScm);
- return 0;
- }
- BOOL bFound = FALSE;
- for (DWORD i=0; i < lpServicesReturned; i++)
- {
- CString finder(lpService[i].lpServiceName);
- if (finder.Compare(szServiceName) == 0)
- {
-
- if (lpService[i].ServiceStatus.dwCurrentState == SERVICE_RUNNING)
- {
-
- }
- else
- {
-
- }
- bFound = TRUE;
- break;
- }
- }
- if (bFound == FALSE)
- {
-
- }
- }
- SAFEFREE(lpService);
- CloseServiceHandle(hScm);