Дескриптор сервиса. Этот дескриптор возвращают
функции OpenService
или CreateService и он должен
иметь режим доступа SERVICE_START. Более подробно см. Безопасность
сервисов и права доступа.
dwNumServiceArgs
Количество строк в массиве lpServiceArgVectors. Если lpServiceArgVectors
равен NULL, то этот параметр может быть нулевым.
lpServiceArgVectors
Указатель на массив указателей на строки
(завершающиеся нулём), которые будут переданы в
сервис как аргументы. Сервисы драйверов не
получают этих аргументов. Если сервису не
передаются никакие параметры, то этот параметр
можно задать как NULL. Сервис получает доступ к
этим аргументам через свою функцию ServiceMain.
Первый аргумент (argv[0]), это имя сервиса.
Возвращаемое значение
В случае успеха, функция возвращает ненулевое
значение.
В случае ошибки, функция вернёт ноль. Для
получения более подробной информации об ошибке,
можно воспользоваться функцией GetLastError.
В таблице представлены стандартные коды
ошибок:
Значение
Описание
ERROR_ACCESS_DENIED
Дескриптор не имеет прав на запуск
сервиса.
ERROR_INVALID_HANDLE
Неправильный дескриптор.
ERROR_PATH_NOT_FOUND
Не найден исполняемый файл сервиса.
ERROR_SERVICE_ALREADY_RUNNING
Экземпляр сервиса уже запущен.
ERROR_SERVICE_DATABASE_LOCKED
база данных заблокирована.
ERROR_SERVICE_DEPENDENCY_DELETED
Сервис зависит от другого сервиса,
который не существует или помечен на удаление.
ERROR_SERVICE_DEPENDENCY_FAIL
Сервис зависит от другого сервиса,
который не получается запустить.
ERROR_SERVICE_DISABLED
Запуск сервиса запрещён.
ERROR_SERVICE_LOGON_FAILED
Эта ошибка появляется, если сервис был
запущен и аккаунта, который не имеет прав "Log on
as a service".
При запуске сервисов драйверов, функция StartService
не вернёт управление до тех пор, пока драйвер
устройства не закончит инициализацию.
Перед тем, как вернуть управление из StartService,
менеджер управления сервисами устанавливает
следующие значения состояния сервиса:
Текущее состояние сервиса SERVICE_START_PENDING.
Controls accepted is set to none (zero).
Значение CheckPoint устанавливается в ноль.
Время WaitHint устанавливается в 2 секунды.
Чтобы контролировать процесс запуска сервиса,
можно периодически вызывать функцию QueryServiceStatus.
В процессе инициализации, сервис не может
вызывать StartService, так как на время
инициализации сервиса, менеджер блокирует базу
данных.
Пример
См. Запуск сервиса.
Дополнительная информация
Windows NT/2000/XP: Присутствует начиная с Windows NT 3.1 и
выше. Unicode: Существует как Unicode, так и ANSI версии. Заголовок: Объявлена в Winsvc.h; включена в Windows.h. Библиотека: Advapi32.lib.