Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Регистрирует функцию для обработки запросов управления службами.
Эта функция заменена функцией RegisterServiceCtrlHandlerEx. Служба может использовать любую функцию, но новая функция поддерживает пользовательские данные контекста, а новая функция обработчика поддерживает дополнительные расширенные коды управления.
Синтаксис
SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerA(
[in] LPCSTR lpServiceName,
[in] LPHANDLER_FUNCTION lpHandlerProc
);
Параметры
[in] lpServiceName
Имя службы, выполняемой вызывающим потоком. Это имя службы, указанное в функции CreateService при создании службы.
Если тип службы SERVICE_WIN32_OWN_PROCESS, функция не проверяет допустимость указанного имени, так как в процессе существует только одна зарегистрированная служба.
[in] lpHandlerProc
Указатель на функцию обработчика для регистрации. Дополнительные сведения см. в обработчика.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение — это дескриптор состояния службы.
Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.
Следующие коды ошибок можно задать диспетчером управления службой.
| Возвращаемый код | Описание |
|---|---|
|
Недостаточно памяти доступно для преобразования параметра строки ANSI в Юникод. Эта ошибка не возникает для параметров строки Юникода. |
|
Запись службы была указана неправильно при вызове функции StartServiceCtrlDispat cher. |
Замечания
Функция ServiceMain новой службы должна немедленно вызвать функцию RegisterServiceCtrlHandler, чтобы зарегистрировать функцию обработчика элементов управления с помощью диспетчера управления. Это позволяет диспетчеру управления вызывать указанную функцию при получении запросов на управление для этой службы. Список возможных кодов элементов управления см. вобработчика
Функция RegisterServiceCtrlHandler должна вызываться перед первым вызовом SetServiceStatus, так как RegisterServiceCtrlHandler возвращает дескриптор состояния службы для вызывающего объекта, чтобы другие службы не могли непреднамеренно задать это состояние службы. Кроме того, обработчик элементов управления должен находиться на месте, чтобы получать запросы на управление по времени, когда служба указывает элементы управления, которые он принимает через функцию SetServiceStatus.
Когда функция обработчика управления вызывается с помощью запроса элемента управления, служба должна вызывать SetServiceStatus сообщать о состоянии диспетчера управления службами только в том случае, если состояние службы изменилось, например, когда служба обрабатывает элементы управления остановкой или завершением работы. Если состояние службы не изменилось, служба не должна сообщать о состоянии диспетчера управления службами.
Дескриптор состояния службы не должен быть закрыт.
Примеры
Пример см. в записи функции ServiceMain.
Заметка
Заголовок winsvc.h определяет RegisterServiceCtrlHandler как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
| Требование | Ценность |
|---|---|
| минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
| минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
| целевая платформа | Виндоус |
| заголовка | winsvc.h (включая Windows.h) |
| библиотеки |
Advapi32.lib |
| DLL | Advapi32.dll |
См. также
обработчика
функции обработчика управления службами