示例#1
0
        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);
            }
        }
示例#2
0
        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)));
            }
        }
示例#3
0
        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());
            }
        }
示例#4
0
        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());
                }
            }
        }
示例#5
0
        /// <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)));
                }
            }
        }