hi, this is the cod that i was written for getting the service status.i have some problem in this code.i am not able to getting the staus of the service.anybody have idea plaese help me. Code: DWORD ServiceGetStatus(char *sService) { SC_HANDLE schm; SC_HANDLE schs; LPSERVICE_STATUS TServiceStatus = NULL; DWORD dwStat = -1; //dwStat = -1; // connect to the service control manager //schm = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); schm = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); if(schm > 0) { schs = OpenService(schm,sService,SERVICE_QUERY_STATUS); if(schs > 0) { if(QueryServiceStatus(schs,TServiceStatus)) { dwStat = TServiceStatus->dwCurrentState; CloseServiceHandle(schs); CloseServiceHandle(schm); } std::cout<<"status is false"<<std::endl; } } return dwStat; } int main() { DWORD status = 0; const char machine[]=""; CHAR Service_Name[32]; strcpy(Service_Name,"Sundar_Service"); status = ServiceGetStatus(Service_Name); if(status == 1) std::cout<<"service stopped"<<std::endl; if(status == 4) std::cout<<"service is running"<<std::endl; return 0; }
I think you should do it like this : Code: schs = OpenService(schm,sService,SERVICE_ALL_ACCESS); The other mistake is here : I think it should be done like this : Code: if(QueryServiceStatus(schs,&TServiceStatus)) Note that you should pass the address of TServiceStatus and not itself, and declare TServiceStatus of type SERVICE_STATUS. What you were doing is passing a NULL pointer as arg ! So, I think the working code becomes : Code: DWORD ServiceGetStatus(char *sService) { SC_HANDLE schm; SC_HANDLE schs; SERVICE_STATUS TServiceStatus; DWORD dwStat = -1; schm = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT); if(schm > 0) { schs = OpenService(schm,sService,SERVICE_ALL_ACCESS); if(schs > 0) { if(QueryServiceStatus(schs, &TServiceStatus)) { dwStat = TServiceStatus->dwCurrentState; CloseServiceHandle(schs); CloseServiceHandle(schm); } std::cout<<"status is false"<<std::endl; } } return dwStat; } int main() { DWORD status = 0; const char machine[]=""; CHAR Service_Name[32]; strcpy(Service_Name,"Sundar_Service"); status = ServiceGetStatus(Service_Name); if(status == 1) std::cout<<"service stopped"<<std::endl; else if(status == 4) std::cout<<"service is running"<<std::endl; return 0; }