Функция CreateService создает объект службы и добавляет его в указанную базу данных диспетчера управления службами.
Синтаксис
SC_HANDLE CreateService( SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCTSTR lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword ); |
Параметры
Тип | Предназначение |
---|---|
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).
Программа
запуска использует очередность загрузки
групп, чтобы загрузить группы служб в
указанном порядке по отношению к другим
группам. Список очередности загрузки групп
содержатся в следующем значении реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder |
Вы можете
использовать признак для того, чтобы
упорядочить запуск службы в пределах
очередности загрузки группы, определяя
вектор очередности признака в следующем
значении реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList |
Признаки вычисляются только для служб драйвера, которые имеют типы пуска SERVICE_BOOT_START или SERVICE_SYSTEM_START.
Вы должны ставить в начале имен группы SC_GROUP_IDENTIFIER так, чтобы они могли отличаться от имени службы, потому что службы и группы служб совместно используют то же самое пространство имен.
Если этот параметр - значение ПУСТО (NULL), функция CreateService использует учетную запись LocalSystem. Если тип службы задан - SERVICE_INTERACTIVE_PROCESS, служба должна запуститься в учетной записи LocalSystem.
Если этот параметр - NT AUTHORITY\LocalService, функция CreateService использует учетную запись LocalService. Если параметр - NT AUTHORITY\NetworkService, CreateService использует учетную запись NetworkService.
Windows NT: Если тип службы - SERVICE_WIN32_SHARE_PROCESS, Вы должны задать учетную запись LocalSystem. На более поздних версиях Windows, совместно используемый процесс может запуститься как любой пользователь.
Если тип службы - SERVICE_KERNEL_DRIVER или SERVICE_FILE_SYSTEM_DRIVER, ее имя - имя объекта драйвера, который система использует, чтобы загрузить драйвер устройства. Задайте значение ПУСТО (NULL), если драйвер должен использовать имя объекта по умолчанию, созданное системой ввода / вывода (I/O).
Для служб драйвера пароли игнорируются .
Если функция завершается успешно, возвращаемое значение - дескриптор службы.
Если функция завершается ошибкой, возвращаемое значение - значение ПУСТО (NULL). Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Следующие коды ошибки могут установиться диспетчером управления службами. Другие коды ошибки могут установиться функциями реестра, которые вызывает диспетчер управления службами.
Код возврата | Описание |
---|---|
ERROR_ACCESS_DENIED | Дескриптор базы данных Диспетчера управления службами (SCM) не имеет права доступа SC_MANAGER_CREATE_SERVICE. |
ERROR_CIRCULAR_DEPENDENCY | Установлена циклическая зависимость служб. |
ERROR_DUPLICATE_SERVICE_NAME | Отображаемое имя уже существует в базе данных диспетчера управления службами или как имя службы или как другое отображаемое имя. |
ERROR_INVALID_HANDLE | Дескриптор указанной базы данных диспетчера управления службами недействителен. |
ERROR_INVALID_NAME | Указанное имя службы недействительно. |
ERROR_INVALID_PARAMETER | Параметр, который был определен, недействителен. |
ERROR_INVALID_SERVICE_ACCOUNT | Имя учетной записи пользователя, заданное в параметре lpServiceStartName не существует. |
ERROR_SERVICE_EXISTS | Указанная служба уже существует в этой базе данных. |
Функция CreateService создает объект
службы и устанавливает его в базу данных
диспетчера управления службами, создавая
ключ с тем же самым именем, что и служба, в
следующем ключе реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services |
Информация, определяемая CreateService, ChangeServiceConfig и ChangeServiceConfig2 сохраняется как значения под этим ключом. Ниже - примеры значений, сохраненных для службы.
Значение | Описание |
---|---|
DependOnGroup | Очередность загрузки групп, от которой эта служба зависит, как задано параметром lpDependencies. |
DependOnService | Службы, от которых эта служба зависит, как задано параметром lpDependencies. |
Description | Набор признаков, определяемых функцией ChangeServiceConfig2. |
DisplayName | Отображаемое имя, заданное параметром lpDisplayName. |
ErrorControl | Защита от ошибок, заданная параметром dwErrorControl. |
FailureActions | Действия сбоя, заданные функцией ChangeServiceConfig2. |
Group | Очередность загрузки группы, заданная параметром lpLoadOrderGroup. Обратите внимание! на то, что такая установка этого значения может отвергнуть установку значения DependOnService. |
ImagePath | Имя двоичного файла, как задано параметром lpBinaryPathName. |
ObjectName | Имя учетной записи, заданное параметром lpServiceStartName. |
Start | Когда запускать службу, как задано параметром dwStartType. |
Tag | Идентификатор признака, заданный параметром lpdwTagId. |
Type | Тип службы, заданный параметром dwServiceType. |
Программы установки и сама служба могут создать дополнительные подключи с информацией специальной для службы.
Возвращенный дескриптор действителен только для процесса который вызывается CreateService. Он может быть закрыт, вызовом функции CloseServiceHandle.
Если Вы создаете службы, которые совместно используют процесс, избегайте вызывать функции с воздействиями на весь процесс, типа ExitProcess. Кроме того, не выгружайте вашу DLL службы.
Пример смотри в статье Установка службы.
Обзор Службы, Функции, используемые службами, ChangeServiceConfig, ChangeServiceConfig2, CloseServiceHandle, ControlService, DeleteService, EnumDependentServices, OpenSCManager, QueryServiceConfig, QueryServiceObjectSecurity, QueryServiceStatusEx, SetServiceObjectSecurity, StartService
Размещение и совместимость CreateService |
||
К |
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 |
Реализуется как CreateServiceW (Unicode) и CreateServiceA (ANSI). |
|
Замечания по платформе |
Не имеется |