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); }
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; }