Функция ChangeServiceConfig


Функция ChangeServiceConfig изменяет параметры конфигурации службы. Чтобы изменять дополнительные параметры конфигурации, используйте функцию ChangeServiceConfig2.

Синтаксис

BOOL ChangeServiceConfig(
  SC_HANDLE hService,
  DWORD dwServiceType,
  DWORD dwStartType,
  DWORD dwErrorControl,
  LPCTSTR lpBinaryPathName,
  LPCTSTR lpLoadOrderGroup,
  LPDWORD lpdwTagId,
  LPCTSTR lpDependencies,
  LPCTSTR lpServiceStartName,
  LPCTSTR lpPassword,
  LPCTSTR lpDisplayName
);
Параметры
hService
[in] Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService и должен иметь право доступа SERVICE_CHANGE_CONFIG. Дополнительную информацию смотри в статье Защита службы и права доступа.
dwServiceType
[in] Тип службы. Задайте SERVICE_NO_CHANGE, если Вы не изменяете существующий тип службы; иначе, задайте один из следующих типов службы.

 

Тип Предназначение
SERVICE_FILE_SYSTEM_DRIVER Сервисный драйвер файловой системы.
SERVICE_KERNEL_DRIVER Сервисный драйвер.
SERVICE_WIN32_OWN_PROCESS Служба, которая запускается в своем собственном процессе.
SERVICE_WIN32_SHARE_PROCESS Служба, которая совместно использует процесс с другими службами.

 

Если Вы задаете или SERVICE_WIN32_OWN_PROCESS или SERVICE_WIN32_SHARE_PROCESS, а служба запускается в контексте учетной записи LocalSystem, Вы можете также задать и следующий тип.

Тип Предназначение
SERVICE_INTERACTIVE_PROCESS Служба может взаимодействовать с рабочим столом.

Дополнительную информацию смотри в статье Диалоговые службы.

dwStartType
[in] Варианты запуска службы. Задайте SERVICE_NO_CHANGE, если Вы не изменяете существующий тип запуска; иначе, задайте одно из следующих значений.

 

Тип Предназначение
SERVICE_AUTO_START Служба, запускается автоматически диспетчером управления службами в ходе запуска системы.
SERVICE_BOOT_START Драйвер устройства, запускается системным загрузчиком. Это значение действительно только для служб драйвера.
SERVICE_DEMAND_START Служба, запускается диспетчером управления службами, когда процесс вызывает функцию StartService.
SERVICE_DISABLED Служба, которая не может быть запущена. Попытки запустить службу приводят к коду ошибки ERROR_SERVICE_DISABLED.
SERVICE_SYSTEM_START Драйвер устройства, запущенный функцией IoInitSystem. Это значение действительно только для служб драйвера.
dwErrorControl
[in] Серьезность ошибки и предпринятые действия, если эта служба не в состоянии запуститься. Задайте SERVICE_NO_CHANGE, если Вы не изменяете существующую защиту от ошибок; иначе, задайте одно из следующих значений.
 
Значения Предназначение
SERVICE_ERROR_IGNORE Программа запуска регистрирует ошибку, но продолжает операцию запуска.
SERVICE_ERROR_NORMAL Программа запуска регистрирует ошибку и показывает всплывающее окно сообщения, но продолжает операцию запуска.
SERVICE_ERROR_SEVERE Программа запуска регистрирует ошибку. Если стартовала последняя, заведомо без ошибок конфигурация, то операция запуска продолжается. Иначе, система перезапускается с последней, заведомо без ошибок конфигурацией.
SERVICE_ERROR_CRITICAL Программа запуска, если возможно, регистрирует ошибку. Если стартовала последняя, заведомо без ошибок конфигурация, то операция запуска завершается ошибкой. Иначе, система перезапускается с последней, заведомо без ошибок конфигурацией.
lpBinaryPathName
[in] Указатель на строку с завершающим нулем, которая имеет в своем составе полный путь доступа к двоичному файлу службы. Задайте значение ПУСТО (NULL), если Вы не изменяете существующий путь. Если путь имеет в своем составе пробел, он должен быть заключен в кавычки так, чтобы его правильно понимали. Например, "d: \ \мой совместно используемый ресурс\\ myservice.exe" должен определиться как "\" d:\\ мой совместно используемый ресурс\\ myservice.exe\ "".

Путь может также включать в себя параметры автозапуска службы. Например, "d: \\ myshare \\ myservice.exe arg1 arg2". Эти параметры передаются в точку входа службы (обычно это главная функция main).

lpLoadOrderGroup
[in] Указатель на строку с завершающим нулем, которая именует группу очередности загрузки, членом которой эта служба является. Задайте значение ПУСТО (NULL), если Вы не изменяете существующую группу. Задайте пустую строку, если служба не является членом группы.

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

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
lpdwTagId
[out] Указатель на переменную, получающую значение признака, которое является уникальным в группе, заданной в параметре lpLoadOrderGroup. Задайте значение ПУСТО (NULL), если Вы не изменяете существующий признак.

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

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

Признаки вычисляются только для служб драйвера, которые имеют типы пуска SERVICE_BOOT_START или SERVICE_SYSTEM_START.

lpDependencies
[in] Указатель на массив с двойным нулевым символом в конце называемый нулем - разделителем служб или очередности загрузки групп, которую система должна запустить перед той службой, которая может стартовать. (Зависимость от группы означает, что эта служба может  запуститься тогда, если по крайней мере один член группы запускается после попытки запустить всех членов  группы.) Задайте значение ПУСТО (NULL), если Вы не изменяете существующие зависимости. Задайте пустую строку, если служба не имеет  зависимости.

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

lpServiceStartName
[in] Указатель на строку с завершающим нулем, которая задает имя учетной записи, под которой должна запуститься служба. Задайте значение ПУСТО (NULL), если Вы не изменяете существующее название учетной записи. Если тип службы - SERVICE_WIN32_OWN_PROCESS, используйте название учетной записи в форме DomainName\UserName. Процесс службы должен начать работу в системе как этот пользователь. Если учетная запись является членом встроенного домена, Вы можете задать . .\UserName (обратите внимание! на то, что, соответствующая строка на  C/C ++ - ".\\UserName"). Дополнительную информацию смотри в статье Служба учетных записей пользователя и предупреждение в разделе Замечания.

Windows NT:  Если тип службы - SERVICE_WIN32_SHARE_PROCESS, Вы должны задать учетную запись LocalSystem. На более поздних версиях Windows, общедоступный процесс может запуститься как любой пользователь.

Если тип службы - SERVICE_KERNEL_DRIVER или SERVICE_FILE_SYSTEM_DRIVER, то имя - имя объекта драйвера который система использует, чтобы загрузить драйвер устройства. Задайте значение ПУСТО (NULL), если драйвер должен использовать имя объекта по умолчанию, созданное системой ввода / вывода.

lpPassword
[in] Указатель на строку с завершающим нулем, которая имеет в своем составе пароль к имени учетной записи, заданной параметром lpServiceStartName. Задайте значение ПУСТО (NULL), если Вы не изменяете существующий пароль. Задайте пустую строку, если учетная запись не имеет никакого пароля или если служба запускается в учетной записи LocalService, NetworkService или  LocalSystem. Дополнительную информацию смотри в статье Список сервисных записей.

Пароли игнорируются для служб драйвера.

lpDisplayName
[in] Указатель на строку с завершающим нулем, которая имеет в своем составе отображаемое имя, которое используется приложениями, чтобы идентифицировать службу для ее пользователей. Задайте значение ПУСТО (NULL), если Вы не изменяете существующее отображаемое имя; иначе, эта строка имеет максимальную длину 256 символов. Имя сохраняется с учетом регистра в диспетчере управления службами. Отображаемое имя проверяется всегда как нечувствительное к регистру.

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

Если функция завершается успешно, возвращаемое значение является ненулевым.

Если функция завершается ошибкой, возвращаемое значение - нуль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

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

Код возврата Описание
ERROR_ACCESS_DENIED Дескриптор не имеет права доступа SERVICE_CHANGE_CONFIG.
ERROR_CIRCULAR_DEPENDENCY Определяется циклическая зависимость служб.
ERROR_DUPLICATE_SERVICE_NAME Отображаемое имя уже существует в менеджере  базы данных диспетчера службы, или как имя службы или как другое отображаемое имя.
ERROR_INVALID_HANDLE Указанный дескриптор недействителен.
ERROR_INVALID_PARAMETER Параметр, который определялся, недействителен.
ERROR_INVALID_SERVICE_ACCOUNT Имя учетной записи не существует, или служба определяется, как совместно использующая тот же самый двоичный файл, что и установленная служба, но с именем учетной записи, которое не то же самое, что и  установленная служба.
ERROR_SERVICE_MARKED_FOR_DELETE Служба была намечена для удаления.

Замечания

Функция ChangeServiceConfig изменяет информацию о конфигурации для указанной службы в базе данных диспетчера управления службами. Вы можете получить текущую информацию о конфигурации при помощи использования функции QueryServiceConfig.

Если конфигурация изменяется для службы, которая запускается, за исключением lpDisplayName, изменения не вступают в силу до тех пор, пока служба не остановиться. Чтобы обновить мандат без перезапуска службы, используйте функцию LsaCallAuthenticationPackage.

Замечания по обеспечению безопасности

Установка параметра  lpServiceStartName изменяет учетную запись входа в систему службы. Это может вызвать проблемы. Если Вы зарегистрировали сервисное основное имя (SPN), оно теперь будет зарегистрировано в неправильной учетной записи. Точно так же, если Вы использовали элемент списка контроля доступа (ACE), чтобы предоставить доступ  к службе, он будет  теперь предоставлять доступ к неправильной учетной записи.

Демонстрационный код

Пример смотри в статье Изменение конфигурации службы.

Смотри также

Обзор Службы, Функции, используемые службами, ChangeServiceConfig2, CreateService, LockServiceDatabase, OpenService, QueryServiceConfig, QueryServiceConfig2, StartService

Размещение и совместимость ChangeServiceConfig 

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Да
в    
е    
р    

Используемая библиотека

Advapi32.lib

Используемая DLL advapi32.dll
 Заголовочный файл  

- объявлено в

Winsvc.h

 - включено в

Windows.h

 Unicode

Реализуется как ChangeServiceConfigW (Unicode) и ChangeServiceConfigA (ANSI).

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
В оглавление справки

Hosted by uCoz