Функция 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 ); |
Параметры
| Тип | Предназначение |
|---|---|
| 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 | Служба может
взаимодействовать с рабочим столом. Дополнительную информацию смотри в статье Диалоговые службы. |
| Тип | Предназначение |
|---|---|
| SERVICE_AUTO_START | Служба, запускается автоматически диспетчером управления службами в ходе запуска системы. |
| SERVICE_BOOT_START | Драйвер устройства, запускается системным загрузчиком. Это значение действительно только для служб драйвера. |
| SERVICE_DEMAND_START | Служба, запускается диспетчером управления службами, когда процесс вызывает функцию StartService. |
| SERVICE_DISABLED | Служба, которая не может быть запущена. Попытки запустить службу приводят к коду ошибки ERROR_SERVICE_DISABLED. |
| SERVICE_SYSTEM_START | Драйвер устройства, запущенный функцией IoInitSystem. Это значение действительно только для служб драйвера. |
| Значения | Предназначение |
|---|---|
| SERVICE_ERROR_IGNORE | Программа запуска регистрирует ошибку, но продолжает операцию запуска. |
| SERVICE_ERROR_NORMAL | Программа запуска регистрирует ошибку и показывает всплывающее окно сообщения, но продолжает операцию запуска. |
| SERVICE_ERROR_SEVERE | Программа запуска регистрирует ошибку. Если стартовала последняя, заведомо без ошибок конфигурация, то операция запуска продолжается. Иначе, система перезапускается с последней, заведомо без ошибок конфигурацией. |
| SERVICE_ERROR_CRITICAL | Программа запуска, если возможно, регистрирует ошибку. Если стартовала последняя, заведомо без ошибок конфигурация, то операция запуска завершается ошибкой. Иначе, система перезапускается с последней, заведомо без ошибок конфигурацией. |
Путь может также включать в себя параметры автозапуска службы. Например, "d: \\ myshare \\ myservice.exe arg1 arg2". Эти параметры передаются в точку входа службы (обычно это главная функция main).
Программа запуска использует группы очередности загрузки, чтобы загрузить группы служб в указанном порядке относительно других групп. Список очередности загрузки групп содержится в значении ServiceGroupOrder ключа реестра ниже:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control |
Вы можете использовать признак для того, чтобы упорядочить запуск службы в пределах очередности загрузки в группе, задавая вектор признака очередности в значении GroupOrderList следующего ключа реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control |
Признаки вычисляются только для служб драйвера, которые имеют типы пуска SERVICE_BOOT_START или SERVICE_SYSTEM_START.
Вы должны ставить в начале имени группы SC_GROUP_IDENTIFIER так, чтобы они могли отделяться от имени службы, потому что службы и группы служб совместно используют то же самое пространство имен.
Windows NT: Если тип службы - SERVICE_WIN32_SHARE_PROCESS, Вы должны задать учетную запись LocalSystem. На более поздних версиях Windows, общедоступный процесс может запуститься как любой пользователь.
Если тип службы - SERVICE_KERNEL_DRIVER или SERVICE_FILE_SYSTEM_DRIVER, то имя - имя объекта драйвера который система использует, чтобы загрузить драйвер устройства. Задайте значение ПУСТО (NULL), если драйвер должен использовать имя объекта по умолчанию, созданное системой ввода / вывода.
Пароли игнорируются для служб драйвера.
Если функция завершается успешно, возвращаемое значение является ненулевым.
Если функция завершается ошибкой, возвращаемое значение - нуль. Чтобы получить дополнительную информацию об ошибке, вызовите 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). |
|
| Замечания по платформе |
Не имеется |
|