private static int GetServiceProcessId(SafeServiceHandle scm, string name) { using (SafeServiceHandle service = Win32NativeMethods.OpenService(scm, name, ServiceAccessRights.QueryStatus)) { if (service.IsInvalid) { throw new SafeWin32Exception(); } return(QueryStatus(service).dwProcessId); } }
private static ServiceInformation GetServiceSecurityInformation(SafeServiceHandle scm, string name) { using (SafeServiceHandle service = Win32NativeMethods.OpenService(scm, name, ServiceAccessRights.QueryConfig | ServiceAccessRights.ReadControl)) { if (service.IsInvalid) { throw new SafeWin32Exception(); } return(new ServiceInformation(name, GetServiceSecurityDescriptor(service), GetTriggersForService(service))); } }
private static NtResult <ServiceInformation> GetServiceSecurityInformation(SafeServiceHandle scm, string name, bool throw_on_error) { using (SafeServiceHandle service = Win32NativeMethods.OpenService(scm, name, ServiceAccessRights.QueryConfig | ServiceAccessRights.ReadControl)) { if (service.IsInvalid) { return(Win32Utils.GetLastWin32Error().CreateResultFromDosError <ServiceInformation>(throw_on_error)); } return(new ServiceInformation(name, GetServiceSecurityDescriptor(service, "service"), GetTriggersForService(service), GetServiceSidType(service), GetServiceLaunchProtectedType(service), GetServiceRequiredPrivileges(service), QueryConfig(service, false).GetResultOrDefault()).CreateResult()); } }
private static NtResult <SafeServiceHandle> OpenService(string name, ServiceAccessRights desired_access, bool throw_on_error) { using (SafeServiceHandle scm = Win32NativeMethods.OpenSCManager(null, null, ServiceControlManagerAccessRights.Connect)) { if (scm.IsInvalid) { return(Win32Utils.GetLastWin32Error().CreateResultFromDosError <SafeServiceHandle>(throw_on_error)); } using (var service = Win32NativeMethods.OpenService(scm, name, desired_access)) { if (service.IsInvalid) { return(Win32Utils.GetLastWin32Error().CreateResultFromDosError <SafeServiceHandle>(throw_on_error)); } return(service.Detach().CreateResult()); } } }
/// <summary> /// Get a running service by name. /// </summary> /// <param name="name">The name of the service.</param> /// <returns>The running service.</returns> /// <remarks>This will return active and non-active services as well as drivers.</remarks> public static RunningService GetService(string name) { using (SafeServiceHandle scm = Win32NativeMethods.OpenSCManager(null, null, ServiceControlManagerAccessRights.Connect)) { if (scm.IsInvalid) { throw new SafeWin32Exception(); } using (var service = Win32NativeMethods.OpenService(scm, name, ServiceAccessRights.QueryConfig | ServiceAccessRights.QueryStatus)) { if (service.IsInvalid) { throw new SafeWin32Exception(); } return(new RunningService(name, GetServiceDisplayName(service), QueryStatus(service))); } } }