Esempio n. 1
0
        public static int QueryDriverStatus(string name, bool isKernelDriverService = false)
        {
            Logger.Info("{0} {1}", (object)MethodBase.GetCurrentMethod().Name, (object)name);
            IntPtr num1 = ServiceManager.OpenSCManager(ServiceManager.ServiceManagerRights.Connect);
            IntPtr num2 = IntPtr.Zero;

            try
            {
                num2 = ServiceManager.OpenService(num1, name, ServiceManager.ServiceRights.QueryStatus | ServiceManager.ServiceRights.Stop);
                if (num2 == IntPtr.Zero)
                {
                    Logger.Info("service handle not created");
                    return(-1);
                }
                ServiceManager.SERVICE_STATUS lpServiceStatus = new ServiceManager.SERVICE_STATUS(isKernelDriverService);
                if (ServiceManager.QueryServiceStatus(num2, lpServiceStatus) != 0)
                {
                    Logger.Info("current service state is: {0} for service: {1}", (object)lpServiceStatus.dwCurrentState, (object)name);
                    return((int)lpServiceStatus.dwCurrentState);
                }
                Logger.Info("Error in getting service status.." + Marshal.GetLastWin32Error().ToString());
                return(-1);
            }
            catch (Exception ex)
            {
                Logger.Error("Error in querying driver status err: " + ex.ToString());
                return(-1);
            }
            finally
            {
                ServiceManager.CloseServiceHandle(num2);
                ServiceManager.CloseServiceHandle(num1);
            }
        }
Esempio n. 2
0
 private static void StopService(IntPtr hService, bool isKernelDriverService = false)
 {
     Logger.Info("{0} {1}", (object)MethodBase.GetCurrentMethod().Name, (object)Convert.ToString((object)hService, (IFormatProvider)CultureInfo.InvariantCulture));
     ServiceManager.SERVICE_STATUS serviceStatus = new ServiceManager.SERVICE_STATUS(isKernelDriverService);
     ServiceManager.ControlService(hService, ServiceManager.ServiceControl.Stop, serviceStatus);
     ServiceManager.WaitForServiceStatus(hService, ServiceManager.ServiceState.StopPending, ServiceManager.ServiceState.Stopped, serviceStatus);
 }
Esempio n. 3
0
        private static void StartService(IntPtr hService, bool isKernelDriverService = false)
        {
            Logger.Info("{0} {1}", (object)MethodBase.GetCurrentMethod().Name, (object)Convert.ToString((object)hService, (IFormatProvider)CultureInfo.InvariantCulture));
            int num = ServiceManager.StartService(hService, 0, 0);

            if (num == 0)
            {
                int lastWin32Error = Marshal.GetLastWin32Error();
                Logger.Warning("Error in starting service, StartService ret: {0}, Last win32 error: {1}", (object)num, (object)lastWin32Error);
            }
            ServiceManager.SERVICE_STATUS ssStatus = new ServiceManager.SERVICE_STATUS(isKernelDriverService);
            ServiceManager.WaitForServiceStatus(hService, ServiceManager.ServiceState.StartPending, ServiceManager.ServiceState.Running, ssStatus);
        }
Esempio n. 4
0
        private static bool WaitForServiceStatus(
            IntPtr hService,
            ServiceManager.ServiceState waitStatus,
            ServiceManager.ServiceState desiredStatus,
            ServiceManager.SERVICE_STATUS ssStatus)
        {
            ServiceManager.QueryServiceStatus(hService, ssStatus);
            if (ssStatus.dwCurrentState == desiredStatus)
            {
                return(true);
            }
            int tickCount    = Environment.TickCount;
            int dwCheckPoint = ssStatus.dwCheckPoint;

            while (ssStatus.dwCurrentState == waitStatus)
            {
                int millisecondsTimeout = ssStatus.dwWaitHint / 10;
                if (millisecondsTimeout < 1000)
                {
                    millisecondsTimeout = 1000;
                }
                else if (millisecondsTimeout > 10000)
                {
                    millisecondsTimeout = 10000;
                }
                Thread.Sleep(millisecondsTimeout);
                if (ServiceManager.QueryServiceStatus(hService, ssStatus) != 0)
                {
                    if (ssStatus.dwCheckPoint > dwCheckPoint)
                    {
                        tickCount    = Environment.TickCount;
                        dwCheckPoint = ssStatus.dwCheckPoint;
                    }
                    else if (Environment.TickCount - tickCount > ssStatus.dwWaitHint)
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            return(ssStatus.dwCurrentState == desiredStatus);
        }
Esempio n. 5
0
 private static extern int ControlService(
     IntPtr hService,
     ServiceManager.ServiceControl dwControl,
     ServiceManager.SERVICE_STATUS lpServiceStatus);
Esempio n. 6
0
 private static extern int QueryServiceStatus(
     IntPtr hService,
     ServiceManager.SERVICE_STATUS lpServiceStatus);