Метод Change класса Win32_Service (Mbnapi.h)

Метод класса ChangeWMI изменяет Win32_Service.

В этом разделе используется синтаксис MOF. Дополнительные сведения об использовании этого метода см. в разделе Вызов метода .

Синтаксис

uint32 Change(
  [in] string  DisplayName,
  [in] string  PathName,
  [in] uint32  ServiceType,
  [in] uint32  ErrorControl,
  [in] string  StartMode,
  [in] boolean DesktopInteract,
  [in] string  StartName,
  [in] string  StartPassword,
  [in] string  LoadOrderGroup,
  [in] string  LoadOrderGroupDependencies[],
  [in] string  ServiceDependencies[]
);

Параметры

DisplayName [in]

Отображаемое имя для службы. Максимальная длина этой строки равна 256 символам. Имя сохраняется в диспетчере управления службами. Сравнения DisplayName всегда не учитывают регистр.

Ограничения: принимает то же значение, что и свойство Name .

Пример: "Atdisk".

PathName [in]

Полный путь к исполняемому файлу, который реализует службу, например "\SystemRoot\System32\drivers\afd.sys".

ServiceType [in]

Тип служб, предоставляемых процессам, которые их вызывают.

1 (0x1)

Драйвер ядра

2 (0x2)

Драйвер файловой системы

4 (0x4)

Адаптер

8 (0x8)

Драйвер распознавателя

16 (0x10)

Собственный процесс

32 (0x20)

Процесс предоставления общего доступа

256 (0x100)

Интерактивный процесс

ErrorControl [in]

Серьезность ошибки, если эта служба не запускается во время запуска. Значение указывает действие, выполняемое программой запуска в случае сбоя. Все ошибки регистрируются системой.

Игнорировать (0)

Пользователь не получает уведомление.

Обычный (1)

Нормальный. Пользователь получает уведомление.

Тяжелый (2)

Система перезапущена с последней хорошей конфигурацией.

Критический (3)

Попытка перезапустить систему в рабочей конфигурации.

StartMode [in]

Режим запуска базовой службы Windows. Дополнительные сведения см. в разделе «Примечания».

Загрузка

Драйвер устройства, запущенный загрузчиком операционной системы. Это значение допустимо только для служб драйверов.

Система

Драйвер устройства, запущенный процессом инициализации операционной системы. Это значение допустимо только для служб драйверов.

Автоматически

Служба, автоматически запускаемая диспетчером управления службами во время запуска системы.

Вручную

Служба, запускаемая диспетчером управления службами, когда процесс вызывает метод StartService .

Выключено

Служба, которая больше не может быть запущена.

DesktopInteract [in]

Если задано значение True, служба может создавать или взаимодействовать с окном на рабочем столе.

StartName [in]

Имя учетной записи, под которой выполняется служба. В зависимости от типа службы имя учетной записи может быть в формате Имя_домена\Имя_пользователя или .\Username. Процесс службы будет регистрироваться с помощью одной из этих двух форм при его запуске. Если учетная запись принадлежит встроенному домену, можно указать .\Username. Если задано значение NULL , служба будет войдет в систему под учетной записью LocalSystem. Для драйверов ядра или системного уровня StartName содержит имя объекта драйвера (т. е. \FileSystem\Rdr или \Driver\Xns), которое система ввода-вывода использует для загрузки драйвера устройства. Если задано значение NULL, драйвер запускается с именем объекта по умолчанию, созданным системой ввода-вывода на основе имени службы, например DWDOM\Администратор.

Вы также можете использовать формат Имя участника-пользователя (UPN), чтобы указать Имя_пользователя(UPN), например Username@DomainName.

StartPassword [in]

Пароль для имени учетной записи, указанной параметром StartName . Если вы не изменяете пароль, укажите ЗНАЧЕНИЕ NULL . Если служба не имеет пароля, указывается пустая строка.

Примечание

При изменении службы из локальной системы в сеть или из сети в локальную систему параметр StartPassword должен быть пустой строкой (""), а не null.

LoadOrderGroup [in]

Имя группы, с которым она связана. Группы порядка загрузки содержатся в системном реестре и определяют последовательность загрузки служб в операционную систему. Если указатель имеет значение NULL или указывает на пустую строку, служба не принадлежит к группе. Дополнительные сведения см. в разделе «Примечания».

Зависимости между группами должны быть перечислены в параметре LoadOrderGroupDependencies . Сначала запускаются службы в списке групп упорядочения нагрузки, а затем службы в группах, которых нет в списке групп упорядочения нагрузки, а затем службы, не принадлежащие группе. Системный реестр содержит список групп упорядочения нагрузки, расположенный по адресу:

HKEY_LOCAL_MACHINE\Системы\CurrentControlSet\Управления\ServiceGroupOrder

LoadOrderGroupDependencies [in]

Список групп упорядочения нагрузки, которые должны запускаться перед запуском этой службы. Массив вдвойне завершается null. Если указатель имеет значение NULL или указывает на пустую строку, служба не имеет зависимостей. Имена групп должны иметь префикс с помощью символа SC_GROUP_IDENTIFIER (определенного в файле Winsvc.h), чтобы отличать их от имен служб, так как службы и группы служб используют одно и то же пространство имен. Зависимость от группы означает, что эта служба может запускаться, если хотя бы один член группы запущен после попытки запустить всех членов группы.

ServiceDependencies [in]

Список, содержащий имена служб, которые должны запускаться до запуска этой службы. Массив вдвойне завершается null. Если указатель имеет значение NULL или указывает на пустую строку, служба не имеет зависимостей. Зависимость от службы указывает, что эта служба может выполняться только в том случае, если запущена служба, от которую она зависит.

Возвращаемое значение

Возвращает одно из значений, перечисленных в следующем списке, или любое другое значение, указывающее на ошибку. Дополнительные коды ошибок см. в разделе Константы ошибок WMI или WbemErrorEnum. Общие значения HRESULT см. в разделе Системные коды ошибок.

Успешно

0

Запрос принят.

Не поддерживается

1

Запрос не поддерживается.

доступ запрещен

2

У пользователя не было необходимого доступа.

Запущенные зависимые службы

3

Службу нельзя остановить, так как от нее зависят другие работающие службы.

Недопустимый элемент управления службой

4

Запрошенный управляющий код недопустим или неприемлем для данной службы.

Служба не может принимать управление

5

Запрошенный код элемента управления не может быть отправлен в службу, так как состояние службы (Win32_BaseService. Свойство State ) равно 0, 1 или 2.

Служба не активна

6

Служба не запущена.

Время ожидания запроса на обслуживание

7

Служба не ответила на запрос запуска за отведенное время.

Неизвестный сбой

8

Неизвестный сбой при запуске службы.

Путь не найден

9

Путь к каталогу к исполняемому файлу службы не найден.

Служба уже запущена

10

Служба уже запущена.

База данных службы заблокирована

11

База данных для добавления новой службы заблокирована.

Удалена зависимость службы

12

Зависимость, на основе которого используется эта служба, была удалена из системы.

Сбой зависимости службы

13

Этой службе не удалось найти службу, которая необходима зависимой службе.

Служба отключена

14

Эта служба была отключена в системе.

Сбой входа в службу

15

Эта служба не поддерживает проверку подлинности, необходимую для работы в системе.

Служба помечена для удаления

16

Эта служба удаляется из системы.

Поток без службы

17

Служба не имеет потока выполнения.

Циклическая зависимость состояния

18

Служба имеет циклические зависимости при запуске.

Повторяющееся имя состояния

19

Служба выполняется под тем же именем.

Недопустимое имя состояния

20

Имя службы содержит недопустимые символы.

Недопустимый параметр status

21

Службе переданы недопустимые параметры.

Состояние недопустимой учетной записи службы

22

Учетная запись, под которой выполняется эта служба, является недопустимой или не имеет разрешений на запуск службы.

Служба состояния существует

23

Служба существует в базе данных доступных в системе служб.

Служба уже приостановлена

24

Служба в данный момент приостановлена в системе.

Другое

25 4294967295

Комментарии

При запуске компьютера также запускаются все службы автозапуска. В некоторых случаях одна из этих служб может не запуститься вместе с компьютером. При сбое службы во время запуска системы компьютер выполняет действия на основе значения кода управления ошибками службы.

Большинство служб устанавливаются с помощью обычного кода управления ошибками. Некоторые исключения, которые устанавливаются с помощью кода ошибки Ignore, включают в себя:

  • Служба репликации файлов
  • Смарт-карта
  • Вторичный вход в систему
  • WMI

Для служб, установленных с помощью кода пропустить ошибку, пользователю не предоставляется уведомление о сбое службы. Если вы предпочитаете получать на экране уведомление о том, что служба не может запуститься, можно использовать WMI для изменения кода управления ошибками. Коды управления ошибками применяются только к запуску компьютера; Коды управления ошибками не используются при остановке и последующей попытке перезапустить службу после запуска компьютера.

Иногда может потребоваться изменить учетную запись, под которой выполняется данная служба. Например, службу можно запустить под учетной записью администратора. Так как это может привести к уязвимости системы безопасности, вы можете переключить службу на учетную запись с меньшими привилегиями. Кроме того, у вас могут быть службы, работающие под учетной записью, которая будет удалена, или вы можете убедиться, что на всех серверах некоторые службы работают под определенными учетными записями. Вы можете использовать метод Change класса Win32_Service , чтобы настроить службы для запуска под указанной учетной записью пользователя. При выборе учетной записи учитывайте следующее:

  • Учетная запись, используемая в качестве учетной записи службы, должна иметь право на вход в качестве службы. Это право можно предоставить с помощью групповая политика.

  • Учетная запись, используемая в качестве учетной записи службы, не должна быть членом локальной, доменной или корпоративной группы администраторов.

  • Каждый экземпляр службы должен выполняться под уникальной учетной записью пользователя. Это обеспечивает дополнительную безопасность и позволяет проводить аудит отдельных экземпляров служб.

  • Если служба является интерактивной, она должна выполняться под учетной записью LocalSystem.

    LocalSystem является обязательным, так как только одна оконная станция (WinSta0) может быть видимой и интерактивной одновременно. Если служба выполняется под учетной записью, отличной от LocalSystem, она выполняется на станции окна Service-0x03e7$\Default, которая является невидимым окном. Службы, работающие в этой оконной станции, не могут принимать входные или отображаемые выходные данные.

При назначении учетной записи службе SCM требует правильный пароль для этой учетной записи, прежде чем выполнять назначение. Если вы указали неправильный пароль, SCM отклоняет учетную запись. Если вы настраиваете учетную запись службы с помощью учетной записи LocalSystem, LocalService или NetworkService, вам не нужно указывать пароль учетной записи, так как эти учетные записи не имеют паролей.

SCM сохраняет пароль учетной записи в базе данных служб. Однако после назначения пароля SCM не гарантирует, что пароль, хранящийся в базе данных служб, и пароль, назначенный учетной записи пользователя в Active Directory, по-прежнему совпадают. Следовательно, может возникнуть ситуация, аналогичная следующей:

  • Вы настраиваете службу для запуска под определенной учетной записью пользователя.
  • Служба запускается под этой учетной записью с использованием пароля текущей учетной записи.
  • Вы изменяете пароль для учетной записи пользователя.
  • Служба продолжает работать. Однако если служба останавливается, перезапустить ее невозможно, так как SCM продолжает использовать старый недопустимый пароль. Изменение пароля в Active Directory не приводит к изменению пароля, хранящегося в базе данных служб.

Если вы запускаете службы под обычными учетными записями пользователей, необходимо обновлять эти пароли служб при каждом изменении пароля учетной записи пользователя. Это может занять особенно много времени, если вы не уверены, какие службы выполняются под этой учетной записью или на каких компьютерах есть службы, работающие под этой учетной записью. К счастью, WMI можно использовать для проверка учетных записей служб на всех компьютерах и при необходимости изменить пароль учетной записи службы.

Параметр Win32_LoadOrderGroup представляет группу системных служб, определяющих зависимости выполнения. Службы должны быть инициированы в порядке, определенном группой заказов загрузки, так как службы зависят друг от друга. Для правильной работы этих зависимых служб требуется наличие предшествующих служб.

Чтобы изменить сетевую службу на локальную систему, параметры StartName и StartPassword должны иметь следующие значения:

StartName = "LocalSystem"
StartPassword = "" // - empty string, not NULL

Чтобы изменить службу из локальной системной службы в сеть, параметры StartName и StartPassword должны иметь следующие значения:

StartName = "NT AUTHORITY\NetworkService"
StartPassword = "" // - empty string, not NULL

Примеры

Следующий VBScript изменяет учетную запись службы для служб с указанной учетной записи пользователя на LocalSystem.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objService in colServices
 errServiceChange = objService.Change( , , , , , , ".\LocalSystem" , "")
Next

Следующий VBScript изменяет пароль учетной записи службы для всех скриптов, выполняющихся в Netsvc.

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2")
Set colServiceList = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE StartName = '.\\NetSvc'")
For Each objservice in colServiceList
 errReturn = objService.Change( , , , , , , , "password")
Next

Требования

Требование Значение
Минимальная версия клиента
Windows Vista
Минимальная версия сервера
Windows Server 2008
Пространство имен
Root\CIMV2
Заголовок
Mbnapi.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

См. также раздел

Классы операционной системы

Win32_Service

Задачи WMI: службы