LenovoLegionToolkit

Форк
0
50 строк · 1.7 Кб
1
using System;
2
using System.Runtime.InteropServices;
3
using System.ServiceProcess;
4
using Windows.Win32;
5
using Windows.Win32.Security;
6
using Windows.Win32.System.Services;
7

8
namespace LenovoLegionToolkit.Lib.Extensions;
9

10
internal static class ServiceControllerExtension
11
{
12
    public static unsafe void ChangeStartMode(this ServiceController svc, bool enabled)
13
    {
14
        var scManagerHandle = new SC_HANDLE();
15
        var serviceHandle = new SC_HANDLE();
16

17
        try
18
        {
19
            scManagerHandle = PInvoke.OpenSCManager(null as string, null, PInvoke.SC_MANAGER_ALL_ACCESS);
20
            if (scManagerHandle == IntPtr.Zero)
21
                throw new ExternalException("Open Service Manager Error");
22

23
            serviceHandle = PInvoke.OpenService(scManagerHandle, svc.ServiceName, PInvoke.SERVICE_CHANGE_CONFIG);
24
            if (serviceHandle == IntPtr.Zero)
25
                throw new ExternalException("Open Service Error");
26

27
            var result = PInvoke.ChangeServiceConfig(serviceHandle,
28
                (ENUM_SERVICE_TYPE)PInvoke.SERVICE_NO_CHANGE,
29
                enabled ? SERVICE_START_TYPE.SERVICE_AUTO_START : SERVICE_START_TYPE.SERVICE_DISABLED,
30
                SERVICE_ERROR.SERVICE_ERROR_NORMAL,
31
                null as string,
32
                null,
33
                null,
34
                null,
35
                null,
36
                null,
37
                null);
38

39
            if (result)
40
                return;
41

42
            PInvokeExtensions.ThrowIfWin32Error($"Could not change service: {svc.ServiceName}");
43
        }
44
        finally
45
        {
46
            PInvoke.CloseServiceHandle(serviceHandle);
47
            PInvoke.CloseServiceHandle(scManagerHandle);
48
        }
49
    }
50
}
51

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.