Функция ChangeServiceConfigA (winsvc.h)
Изменяет параметры конфигурации службы.
Чтобы изменить необязательные параметры конфигурации, используйте функцию ChangeServiceConfig2 .
Синтаксис
BOOL ChangeServiceConfigA(
[in] SC_HANDLE hService,
[in] DWORD dwServiceType,
[in] DWORD dwStartType,
[in] DWORD dwErrorControl,
[in, optional] LPCSTR lpBinaryPathName,
[in, optional] LPCSTR lpLoadOrderGroup,
[out, optional] LPDWORD lpdwTagId,
[in, optional] LPCSTR lpDependencies,
[in, optional] LPCSTR lpServiceStartName,
[in, optional] LPCSTR lpPassword,
[in, optional] LPCSTR lpDisplayName
);
Параметры
[in] hService
Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService и должен иметь право доступа SERVICE_CHANGE_CONFIG . Дополнительные сведения см. в разделе Безопасность службы и права доступа.
[in] dwServiceType
Тип службы. Укажите SERVICE_NO_CHANGE , если существующий тип службы не изменяется; В противном случае укажите один из следующих типов служб.
Если вы указываете SERVICE_WIN32_OWN_PROCESS или SERVICE_WIN32_SHARE_PROCESS, а служба выполняется в контексте учетной записи LocalSystem, можно также указать следующий тип.
Значение | Значение |
---|---|
|
Служба может взаимодействовать с рабочим столом.
Дополнительные сведения см. в разделе Интерактивные службы. |
[in] dwStartType
Параметры запуска службы. Укажите SERVICE_NO_CHANGE , если существующий тип запуска не изменяется; В противном случае укажите одно из следующих значений.
Значение | Значение |
---|---|
|
Служба автоматически запускается диспетчером управления службами во время запуска системы. |
|
Драйвер устройства, запущенный системным загрузчиком. Это значение допустимо только для служб драйверов. |
|
Служба, запущенная диспетчером управления службами, когда процесс вызывает функцию StartService . |
|
Служба, которая не может быть запущена. Попытки запустить службу приводят к ERROR_SERVICE_DISABLED кода ошибки. |
|
Драйвер устройства, запущенный функцией IoInitSystem . Это значение допустимо только для служб драйверов. |
[in] dwErrorControl
Серьезность ошибки и выполняемое действие, если эта служба не запускается. Укажите SERVICE_NO_CHANGE , если существующий элемент управления ошибками не изменяется; В противном случае укажите одно из следующих значений.
[in, optional] lpBinaryPathName
Полный путь к двоичному файлу службы. Если существующий путь не изменяется, укажите ЗНАЧЕНИЕ NULL. Если путь содержит пробел, он должен быть заключен в кавычки, чтобы он правильно интерпретировался. Например, "d:\my share\myservice.exe" следует указать как ""d:\my share\myservice.exe"".
Путь также может содержать аргументы для службы автоматического запуска. Например, "d:\myshare\myservice.exe arg1 arg2". Эти аргументы передаются в точку входа службы (обычно это функция main).
Если указать путь на другом компьютере, общая папка должна быть доступна учетной записи локального компьютера, так как это контекст безопасности, используемый в удаленном вызове. Однако это требование позволяет любым потенциальным уязвимостям на удаленном компьютере влиять на локальный компьютер. Поэтому лучше всего использовать локальный файл.
[in, optional] lpLoadOrderGroup
Имя группы упорядочения нагрузки, членом которой является эта служба. Если вы не изменяете существующую группу, укажите ЗНАЧЕНИЕ NULL. Укажите пустую строку, если служба не принадлежит группе.
Программа запуска использует группы упорядочения загрузки для загрузки групп служб в указанном порядке по отношению к другим группам. Список групп упорядочения нагрузки содержится в значении ServiceGroupOrder следующего раздела реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
[out, optional] lpdwTagId
Указатель на переменную, получающую значение тега, уникальное в группе, указанной в параметре lpLoadOrderGroup . Если существующий тег не изменяется, укажите ЗНАЧЕНИЕ NULL.
Вы можете использовать тег для запуска службы заказов в группе упорядочения нагрузки, указав вектор порядка тегов в значении GroupOrderList следующего раздела реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
Теги оцениваются только для служб драйверов, которые имеют SERVICE_BOOT_START или SERVICE_SYSTEM_START типы запуска.
[in, optional] lpDependencies
Указатель на массив имен служб, разделенных значениями NULL, или групп упорядочения загрузки, которые система должна запустить перед запуском этой службы. (Зависимость от группы означает, что эта служба может запускаться, если хотя бы один член группы работает после попытки запустить всех участников группы.) Если существующие зависимости не изменяются, укажите ЗНАЧЕНИЕ NULL. Укажите пустую строку, если у службы нет зависимостей.
Имена групп должны быть префиксированы с помощью SC_GROUP_IDENTIFIER, чтобы их можно было отличить от имени службы, так как службы и группы служб используют одно и то же пространство имен.
[in, optional] lpServiceStartName
Имя учетной записи, под которой должна выполняться служба. Укажите ЗНАЧЕНИЕ NULL , если вы не изменяете имя существующей учетной записи. Если служба имеет тип SERVICE_WIN32_OWN_PROCESS, используйте имя учетной записи в формате Имя_\пользователя домена. Процесс службы войдет в систему от имени этого пользователя. Если учетная запись принадлежит встроенному домену, можно указать .\UserName (обратите внимание, что соответствующая строка C/C++ — ".\\UserName"). Дополнительные сведения см. в разделах Учетные записи пользователей службы и предупреждение в разделе Примечания.
Общий процесс может выполняться от имени любого пользователя.
Если служба имеет тип SERVICE_KERNEL_DRIVER или SERVICE_FILE_SYSTEM_DRIVER, это имя объекта драйвера, которое система использует для загрузки драйвера устройства. Укажите значение NULL , если драйвер использует имя объекта по умолчанию, созданное системой ввода-вывода.
Службу можно настроить для использования управляемой учетной записи или виртуальной учетной записи. Если служба настроена для использования управляемой учетной записи службы, это имя управляемой учетной записи службы. Если служба настроена для использования виртуальной учетной записи, укажите имя NT SERVICE\ServiceName. Дополнительные сведения об управляемых учетных записях служб и виртуальных учетных записях см. в пошаговом руководстве по учетным записям служб.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Управляемые учетные записи служб и виртуальные учетные записи не поддерживаются до Windows 7 и Windows Server 2008 R2.
[in, optional] lpPassword
Пароль для имени учетной записи, указанной параметром lpServiceStartName . Если вы не изменяете существующий пароль, укажите ЗНАЧЕНИЕ NULL . Укажите пустую строку, если у учетной записи нет пароля или если служба выполняется в учетной записи LocalService, NetworkService или LocalSystem. Дополнительные сведения см. в разделе Список записей служб.
Если имя учетной записи, указанное параметром lpServiceStartName , является именем управляемой учетной записи службы или виртуальной учетной записи, параметр lpPassword должен иметь значение NULL.
Пароли для служб драйверов игнорируются.
[in, optional] lpDisplayName
Отображаемое имя, используемое приложениями для идентификации службы для пользователей. Укажите ЗНАЧЕНИЕ NULL , если вы не изменяете существующее отображаемое имя; В противном случае эта строка имеет максимальную длину 256 символов. Имя сохраняется с учетом регистра в диспетчере управления службами. Сравнение отображаемых имен всегда не учитывает регистр.
Этот параметр может указать локализованную строку в следующем формате:
@[path]dllname,-strID
Строка с идентификатором strID загружается из dllname; Путь является необязательным. Дополнительные сведения см. в разделе RegLoadMUIString.
Windows Server 2003 и Windows XP: Локализованные строки не поддерживаются до Windows Vista.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Диспетчер управления службами может задать следующие коды ошибок. Другие коды ошибок могут задаваться функциями реестра, которые вызываются диспетчером управления службами.
Код возврата | Описание |
---|---|
|
Дескриптор не имеет права доступа к SERVICE_CHANGE_CONFIG . |
|
Указана циклическая зависимость службы. |
|
Отображаемое имя уже существует в базе данных диспетчера контроллеров служб в виде имени службы или другого отображаемого имени. |
|
Указанный дескриптор недопустим. |
|
Указан недопустимый параметр. |
|
Имя учетной записи не существует, или служба указана для совместного использования того же двоичного файла, что и уже установленная служба, но с именем учетной записи, которое не совпадает с именем установленной службы. |
|
Служба помечена для удаления. |
Комментарии
Функция ChangeServiceConfig изменяет сведения о конфигурации указанной службы в базе данных диспетчера управления службами. Сведения о текущей конфигурации можно получить с помощью функции QueryServiceConfig .
При изменении конфигурации для запущенной службы, за исключением lpDisplayName, изменения не вступают в силу, пока служба не будет остановлена. Чтобы обновить учетные данные без перезапуска службы, используйте функцию LsaCallAuthenticationPackage .
Примечания по безопасности
Установка параметра lpServiceStartName изменяет учетную запись входа службы. Это может привести к проблемам. Если вы зарегистрировали имя субъекта-службы (SPN), оно будет зарегистрировано в неправильной учетной записи. Аналогичным образом, если вы использовали ACE для предоставления доступа к службе, он теперь предоставляет доступ к неправильной учетной записи.Примеры
Пример см. в разделе Изменение конфигурации службы.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winsvc.h (включая Windows.h) |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |
См. также раздел
QueryServiceDynamicInformation
Пошаговое руководство по использованию учетных записей служб