Quote:
Originally Posted by suresh_rtp View Post
Code: cpp
.
.
schs = OpenService(schm,sService,SERVICE_QUERY_STATUS);
.
.
I think you should do it like this :
Code: cpp
schs = OpenService(schm,sService,SERVICE_ALL_ACCESS);

The other mistake is here :
Quote:
Originally Posted by suresh_rtp View Post
Code: cpp
.
.
if(QueryServiceStatus(schs,TServiceStatus))
.
.
I think it should be done like this :
Code: cpp
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: cpp
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;
}

Last edited by SaswatPadhi; 26May2009 at 19:11..