예제 #1
0
        private static System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS[] GetServicesInGroup(string machineName, string group)
        {
            System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS[] enum_service_status_processArray;
            IntPtr zero         = IntPtr.Zero;
            IntPtr status       = IntPtr.Zero;
            int    resumeHandle = 0;

            try
            {
                int num;
                int num2;
                zero = GetDataBaseHandleWithEnumerateAccess(machineName);
                System.ServiceProcess.UnsafeNativeMethods.EnumServicesStatusEx(zero, 0, 0x30, 3, IntPtr.Zero, 0, out num, out num2, ref resumeHandle, group);
                status = Marshal.AllocHGlobal((IntPtr)num);
                System.ServiceProcess.UnsafeNativeMethods.EnumServicesStatusEx(zero, 0, 0x30, 3, status, num, out num, out num2, ref resumeHandle, group);
                int num4 = num2;
                enum_service_status_processArray = new System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS[num4];
                for (int i = 0; i < num4; i++)
                {
                    IntPtr ptr = (IntPtr)(((long)status) + (i * Marshal.SizeOf(typeof(System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS))));
                    System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS structure = new System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS();
                    Marshal.PtrToStructure(ptr, structure);
                    enum_service_status_processArray[i] = structure;
                }
            }
            finally
            {
                Marshal.FreeHGlobal(status);
                if (zero != IntPtr.Zero)
                {
                    SafeNativeMethods.CloseServiceHandle(zero);
                }
            }
            return(enum_service_status_processArray);
        }
예제 #2
0
 internal ServiceController(string machineName, System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS status)
 {
     this.machineName = ".";
     this.name        = "";
     this.displayName = "";
     this.eitherName  = "";
     if (!SyntaxCheck.CheckMachineName(machineName))
     {
         throw new ArgumentException(Res.GetString("BadMachineName", new object[] { machineName }));
     }
     this.machineName      = machineName;
     this.name             = status.serviceName;
     this.displayName      = status.displayName;
     this.commandsAccepted = status.controlsAccepted;
     this.status           = (ServiceControllerStatus)status.currentState;
     this.type             = status.serviceType;
     this.statusGenerated  = true;
 }
 private static System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS[] GetServicesInGroup(string machineName, string group)
 {
     System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS[] enum_service_status_processArray;
     IntPtr zero = IntPtr.Zero;
     IntPtr status = IntPtr.Zero;
     int resumeHandle = 0;
     try
     {
         int num;
         int num2;
         zero = GetDataBaseHandleWithEnumerateAccess(machineName);
         System.ServiceProcess.UnsafeNativeMethods.EnumServicesStatusEx(zero, 0, 0x30, 3, IntPtr.Zero, 0, out num, out num2, ref resumeHandle, group);
         status = Marshal.AllocHGlobal((IntPtr) num);
         System.ServiceProcess.UnsafeNativeMethods.EnumServicesStatusEx(zero, 0, 0x30, 3, status, num, out num, out num2, ref resumeHandle, group);
         int num4 = num2;
         enum_service_status_processArray = new System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS[num4];
         for (int i = 0; i < num4; i++)
         {
             IntPtr ptr = (IntPtr) (((long) status) + (i * Marshal.SizeOf(typeof(System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS))));
             System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS structure = new System.ServiceProcess.NativeMethods.ENUM_SERVICE_STATUS_PROCESS();
             Marshal.PtrToStructure(ptr, structure);
             enum_service_status_processArray[i] = structure;
         }
     }
     finally
     {
         Marshal.FreeHGlobal(status);
         if (zero != IntPtr.Zero)
         {
             SafeNativeMethods.CloseServiceHandle(zero);
         }
     }
     return enum_service_status_processArray;
 }