// // Purpose: // Entry point function. Executes specified command from user. // // Parameters: // Command-line syntax is: svcconfig [command] [service_path] // // Return value: // None // void __cdecl _tmain(int argc, TCHAR *argv[]) { printf("\n"); if( argc != 3 ) { printf("ERROR:\tIncorrect number of arguments\n\n"); DisplayUsage(); return; } StringCchCopy(szCommand, 10, argv[1]); StringCchCopy(szSvcName, 80, argv[2]); if (lstrcmpi( szCommand, TEXT("query")) == 0 ) DoQuerySvc(); else if (lstrcmpi( szCommand, TEXT("describe")) == 0 ) DoUpdateSvcDesc(); else if (lstrcmpi( szCommand, TEXT("disable")) == 0 ) DoDisableSvc(); else if (lstrcmpi( szCommand, TEXT("enable")) == 0 ) DoEnableSvc(); else if (lstrcmpi( szCommand, TEXT("delete")) == 0 ) DoDeleteSvc(); else { _tprintf(TEXT("Unknown command (%s)\n\n"), szCommand); DisplayUsage(); } }
void printServiceStartType() { SC_HANDLE scHandle = NULL; ENUM_SERVICE_STATUS enumServiceStatus = {0}; ENUM_SERVICE_STATUS* penumServiceStatus = NULL; DWORD dwBytesNeeded = 0; DWORD dwServicesReturned = 0; DWORD dwResumeHandle = 0; DWORD dwBytesAllocated = 0; DWORD dwCtr = 0; BOOL bRet = TRUE; int iCtr = 0; int iCheckNumServices = 0; int iEventId = 0; char szTimeINIFile[MAX_PATH + 100] = {0}; char szDef[10] = {0}; char szUpTime[101] = {0}; __try { __try { //Open the SCM manager scHandle = ::OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE); if(NULL == scHandle) { /*LogLastError(g_szErrorLogPath, 9999, NULL, ::GetLastError(), 0, NULL, "ERR: Open SC Manager failed", NULL, NULL);*/ return; } bRet = ::EnumServicesStatus(scHandle, SERVICE_WIN32, //<----Service Type SERVICE_STATE_ALL, //<----Service State &enumServiceStatus, //<----buf storing srvnm,srvst sizeof(enumServiceStatus),//size of structure &dwBytesNeeded, // &dwServicesReturned, &dwResumeHandle); if(dwBytesNeeded > 0) { dwBytesAllocated = dwBytesNeeded + sizeof(ENUM_SERVICE_STATUS); penumServiceStatus = new ENUM_SERVICE_STATUS[dwBytesAllocated]; memset(penumServiceStatus,NULL,dwBytesAllocated); } else { /*LogLastError(g_szErrorLogPath, 9999, NULL, ::GetLastError(), 0, NULL, "ERR: Enum Service Status failed", NULL, NULL);*/ return; } dwBytesNeeded = 0; dwServicesReturned = 0; dwResumeHandle = 0; bRet = ::EnumServicesStatus(scHandle, SERVICE_WIN32, SERVICE_STATE_ALL, penumServiceStatus, dwBytesAllocated, &dwBytesNeeded, &dwServicesReturned, &dwResumeHandle); if(0 == bRet) { /*LogLastError(g_szErrorLogPath, 9999, NULL, ::GetLastError(), 0, NULL, "ERR: Enum Service Status failed", NULL, NULL);*/ return; } ::CloseServiceHandle(scHandle); scHandle = NULL; for(dwCtr = 0; dwCtr < dwServicesReturned; ++dwCtr) { //Retrieve sERVICE nAME DoQuerySvc(penumServiceStatus[dwCtr].lpServiceName); _tprintf(TEXT(" Service Start Type: %s\n"), penumServiceStatus[dwCtr].ServiceStatus.dwCurrentState); } } __except(EXCEPTION_EXECUTE_HANDLER) { } } __finally { if(NULL != scHandle) { ::CloseServiceHandle(scHandle); scHandle = NULL; } } }