- Функция ControlService
- Параметры
- Возвращаемые значения
- Замечания
- Демонстрационный код
- Ошибки Service Control Manager код 7000, 7001, 7009, 7011, 7023, 7031, 7034, 7043 в Windows 10 — о чем говорят и как исправить
- Ошибки с источником Service Control Manager — причины, необходимость исправления
- Увеличение времени ожидания запуска служб для ошибок с кодами 7000, 7009 и 7011
Функция ControlService
Функция ControlService отправляет управляющий код службе.
Параметры
Управляющий код | Предназначение |
---|---|
SERVICE_CONTROL_CONTINUE | Уведомляет, что временно остановленный сервис должен возобновить работу. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE . |
SERVICE_CONTROL_INTERROGATE | Уведомляет сервис, что он должен сообщить информацию о его текущем состоянии Диспетчеру управления сервисами (SCM). Дескриптор hService должен иметь право доступа SERVICE_INTERROGATE . |
SERVICE_CONTROL_NETBINDADD | Уведомляет сетевой сервис, что есть новый компонент для соединения. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE . Однако, этот управляющий код не рекомендуется применять; вместо него используйте функциональные возможности технологии Plug and Play. |
Windows NT: Это значение не поддерживается. SERVICE_CONTROL_NETBINDDISABLE Уведомляет сетевой сервис, что одна из его связей заблокирована. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE . Однако, этот управляющий код не рекомендуется применять; вместо него используйте функциональные возможности технологии Plug and Play.
Windows NT: Это значение значение не поддерживается. SERVICE_CONTROL_NETBINDENABLE Уведомляет сетевой сервис, что одна из его заблокированных связей включена. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE . Однако, этот управляющий код не рекомендуется применять; вместо него используйте функциональные возможности технологии Plug and Play.
Windows NT: Это значение значение не поддерживается. SERVICE_CONTROL_NETBINDREMOVE Уведомляет сетевую службу о том, что компонент для связывания был удален. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE . Однако, этот управляющий код не рекомендуется применять; используйте вместо него функциональные возможности технологии Plug and Play
Windows NT: Это значение значение не поддерживается. SERVICE_CONTROL_PARAMCHANGE Уведомляет службу, что ее параметры запуска изменились. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE .
Windows NT: Это значение не поддерживается. SERVICE_CONTROL_PAUSE Уведомляет службу, что она должна сделать паузу. Дескриптор hService должен иметь право доступа SERVICE_PAUSE_CONTINUE . SERVICE_CONTROL_STOP Уведомляет службу, что она должна остановиться. Дескриптор hService должен иметь право доступа SERVICE_STOP .
Это значение может также быть управляющим кодом определяемым пользователем, как описано в следующей таблице.
Управляющий код | Предназначение |
---|---|
Диапазон от 128 до 255. | Служба определяет действие, связанное с управляющим кодом. Дескриптор hService должен иметь право доступа SERVICE_USER_DEFINED_CONTROL . |
Диспетчер управления службами заполняет поля в структуре только тогда, когда функция ControlService возвращает один из следующих кодов ошибки: NO_ERROR , ERROR_INVALID_SERVICE_CONTROL , ERROR_SERVICE_CANNOT_ACCEPT_CTRL или ERROR_SERVICE_NOT_ACTIVE . Иначе, структура не заполняется.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение является ненулевым.
Если функция завершается ошибкой, возвращаемое значение — нуль. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.
Ниже следуют коды ошибок, которые могут установиться диспетчером управления службами. Другие коды ошибки могут установиться функциями реестра, которые вызывает диспетчер управления службами.
Код возврата | Описание |
---|---|
ERROR_ACCESS_DENIED | Дескриптор не имеет необходимого права доступа. |
ERROR_DEPENDENT_SERVICES_RUNNING | Служба не может быть остановлена, потому что другие запущенные службы зависят от нее. |
ERROR_INVALID_HANDLE | Указанный дескриптор не был получен, при помощи использования функции CreateService или OpenService, или дескриптор больше не действителен. |
ERROR_INVALID_PARAMETER | Требуемый управляющий код не определен. |
ERROR_INVALID_SERVICE_CONTROL | Требуемый управляющий код не действителен, или он неприемлемый для службы. |
ERROR_SERVICE_CANNOT_ACCEPT_CTRL | Требуемый управляющий код нельзя отправить службе, потому что состояние службы — SERVICE_STOPPED , SERVICE_START_PENDING или SERVICE_STOP_PENDING . |
ERROR_SERVICE_NOT_ACTIVE | Служба не запустилась. |
ERROR_SERVICE_REQUEST_TIMEOUT | Был запущен процесс для службы, но он не вызывал функцию StartServiceCtrlDispatcher, или поток, который вызвал StartServiceCtrlDispatcher может быть блокирован функцией обрабатывающей программы управления. |
ERROR_SHUTDOWN_IN_PROGRESS | Система отключилась. |
Замечания
Функция ControlService просит, чтобы Диспетчер управления службами (SCM) отправил требуемый управляющий код службе. Диспетчер управления службами (SCM) отправляет код, если служба определяет, что она примет код, и находится в состоянии, в котором управляющий код можно отправить ей.
Диспетчер управления службами (SCM) обрабатывает управляющие уведомления службы последовательным способом — он будет ждать, чтобы завершения обработки данных сервисного уведомления управления одной службы, перед отправкой следующего. Вследствие этого, вызов функции ControlService будет блокирован в течение 30 секунд, если какая-нибудь служба будет занята, обрабатывая управляющий код. Если занятая служба, когда перерыв истекает, все еще не возвратилась из своего обработчика функции, ControlService завершается ошибкой ERROR_SERVICE_REQUEST_TIMEOUT .
Чтобы остановить или запустить службу, требуется дескриптор безопасности, который позволяет Вам сделать это. Дескриптор безопасности по умолчанию предоставляет учетную запись LocalSystem и для членов группы Администраторов и Опытных пользователей останавливать и запускать службы. Чтобы изменять дескриптор безопасности службы, см. статью Модификация DACL для службы.
Функция QueryServiceStatusEx возвращает структуру SERVICE_STATUS_PROCESS, члены dwCurrentState и dwControlsAccepted которой указывают текущее состояние и управления, принятые запущенной службой. Все запущенные службы принимают управляющий код SERVICE_CONTROL_INTERROGATE по умолчанию. Драйверы не принимают управляющих кодов кроме SERVICE_CONTROL_STOP и SERVICE_CONTROL_INTERROGATE . Каждая служба задает другие управляющие коды, которые она принимает, когда вызывает функцию SetServiceStatus, чтобы сообщить о своем состоянии. Служба должна всегда принимать эти коды, когда она запускается, независимо от того что она делает.
Следующая таблица показывает действие Диспетчера управления службами (SCM) в каждом из возможных состояний службы.
Состояние службы | Останов | Другие управляющие действия |
---|---|---|
STOPPED | (c) | (c) |
STOP_PENDING | (b) | (b) |
START_PENDING | (a) | (b) |
RUNNING | (a) | (a) |
CONTINUE_PENDING | (a) | (a) |
PAUSE_PENDING | (a) | (a) |
PAUSED | (a) | (a) |
Где, | (a) | Если служба принимает этот управляющий код, отправляется запрос службе; иначе, функция ControlService возвращает значение — ноль, а GetLastError возвращает ERROR_INVALID_SERVICE_CONTROL . |
(b) | Служба не находится в состоянии, в котором ей можно передать управление, так что ControlService возвращает значение — ноль, а GetLastError возвращает ERROR_SERVICE_CANNOT_ACCEPT_CTRL . | |
(c) | Служба не активна, таким образом ControlService возвращает значение — ноль, а GetLastError возвращает ERROR_SERVICE_NOT_ACTIVE . |
Демонстрационный код
Размещение и совместимость ControlService
Ошибки Service Control Manager код 7000, 7001, 7009, 7011, 7023, 7031, 7034, 7043 в Windows 10 — о чем говорят и как исправить
Если вы из тех пользователей, которые заглядывают в просмотр событий Windows 10 (Win+R — eventvwr.msc) для анализа ошибок, с большой вероятностью вы там обнаружите ошибки, имеющих код события 7000, 7001, 7009, 7011, 7023, 7031, 7034, а возможно и некоторыми другими похожими. Сообщения об ошибках могут быть разными, но всегда связаны со службами Windows, например:
- 7000 Служба не ответила на запрос своевременно
- 7001 Служба является зависимой от службы, которую не удалось запустить из-за ошибки Не удалось запустить дочернюю службу
- 7001 Служба является зависимой от службы, которую не удалось запустить из-за ошибки Присоединенное к системе устройство не работает
- 7011 Превышение времени ожидания (60000 мс) при ожидании ответа транзакции от службы
- 7023 Служба завершена из-за ошибки Устройство не готово
- 7031 Служба была неожиданно завершена. Это произошло (раз): 1
- 7034 Служба неожиданно прервана. Это произошло (раз): 1
- 7043 Служба не завершила работу должным образом после получения управления для выполнения предзавершающих операций
В этой инструкции подробно о том, что может вызывать такие ошибки в Windows 10, как исправить ошибки с указанными кодами от источника Service Control Manager в Windows 10, стоит ли это делать и дополнительная информация, которая может оказаться полезной.
Ошибки с источником Service Control Manager — причины, необходимость исправления
Прежде чем вы решите переживать и пытаться исправить ошибки с кодами события 7000, 7001, 7009, 7011, 7023, 7031, 7034, 7043 и источником Service Control Manager, учитывайте следующий важный момент: такие ошибки вы встретите на любой, даже самой чистой и беспроблемной системе Windows 10. Если в просмотре событий эти ошибки появляются время от времени, а не ежедневно при включении компьютера, работе и завершении работы, причинами могут быть обычные процессы работы Windows 10 связанные с:
- Установкой обновлений (при этом некоторые службы могут завершаться, а другие, зависимые от них, вызывать ошибку).
- Установкой новых версий драйверов (в том числе и самой Windows 10, в этих случаях мы можем получить ошибки, связанных с тем, что устройство не готово или не работает).
- Установкой сторонних программ, взаимодействующих со службами (иногда лишь временно, для успешного выполнения установки).
- Автоматическим обслуживанием системы (редко).
Во всех случаях появление ошибок возможно не при самом процессе, а после повторного включения компьютера или ноутбука, так как многие процессы установки завершаются лишь после перезагрузки.
В случае же если у вас эти ошибки возникают ежедневно, причины могут быть самыми разными, среди них:
- Ручное вмешательство в тип запуска служб, отключение служб, использование различных программ «для оптимизации», «ускорения» и «отключения слежки» Windows Получить представление о том, как отключение одних служб может влиять на работу других можно получить из статьи Не удалось запустить дочернюю службу — как исправить.
- В случае, если ошибок нет после перезагрузки компьютера или ноутбука, но присутствуют после завершения работы и последующего включения (особенно по прошествии некоторого времени), можно попробовать отключить быстрый запуск Windows 10. Желательно также вручную установить все оригинальные драйверы чипсета с сайта производителя ноутбука или материнской платы, в случае если у вас ПК.
- Нестабильная работа каких-либо устройств (плохое подключение, неисправности). Иногда — проблемы при задействовании устройства после перехода в режим энергосбережения. Можно попробовать отключить экономию энергию для устройств в дополнительных параметрах схемы электропитания в панели управления и в свойствах устройства в диспетчере устройств на вкладке «Управление электропитанием» (присутствует не для всех устройств). Особенно часто это касается USB устройств, сетевых и Wi-Fi адаптеров.
- Иногда ошибки могут появляться при завершении работы, если какие-то сторонние программы (например, клиенты для загрузки файлов из Интернета) мешают завершиться какой-либо сетевой службе.
Также при регулярном появлении указанных ошибок стоит проверить, а появляются ли они, если выполнить чистую загрузку Windows 10 — если нет, можно предположить, что правильному запуску служб мешают какие-то сторонние программы или антивирусы. Также может оказаться, что эти программы инициируют запуск служб, которые не могут быть запущены из-за отключенных дочерних служб.
Если проблема появилась недавно, вам могут помочь точки восстановления системы на дату, предшествующую появлению ошибок.
Увеличение времени ожидания запуска служб для ошибок с кодами 7000, 7009 и 7011
Ошибки типа «Превышение времени ожидания» или «Не ответила на запрос своевременно» при запуске служб c кодами события 7000, 7009 и 7011 могут появляться на медленных компьютерах и ноутбуках с HDD. В таких ситуациях мы можем увеличить время ожидания запуска службы:
- Запустите редактор реестра, для этого нажмите клавиши Win+R на клавиатуре, введите regedit и нажмите Enter.
- Перейдите в раздел реестра
- В правой панели редактора реестра найдите параметр с именем ServicesPipeTimeout. Если такой параметр отсутствует, нажмите правой кнопкой мыши в пустом месте панели справа, выберите «Создать» — «Параметр DWORD» и задайте имя ServicesPipeTimeout для этого параметра.
- Дважды нажмите по параметру ServicesPipeTimeout, выберите «Десятичный» и задайте значение 60000.
- Нажмите Ок, закройте редактор реестра и перезагрузите компьютер.
Указанные действия установят время ожидания для запуска службы равным 60 секунд. Если этого окажется недостаточно, можно попробовать увеличить значение.
Надеюсь, предложенный материал поможет разобраться с ошибками Service Control Manager в просмотре событий Windows 10 и предпринять действия для исправления ситуации при необходимости.