Что означает код ошибки Windows 1071 (ERROR_INVALID_SERVICE_LOCK)?

 
Предыдущий Следующий
ERROR_SERVICE_START_HANG ERROR_SERVICE_MARKED_FOR_DELETE

ERROR_INVALID_SERVICE_LOCK

Блокировка базы данных диспетчера управления службами недействительна

LockServiceDatabase возвращает значение SC_LOCK, представляющее владение блокировкой базы данных SCM. UnlockServiceDatabase требует блокировку, полученную соответствующим вызовом блокировки, и явно документирует ERROR_INVALID_SERVICE_LOCK для недопустимого значения. Устаревшие функции блокировки не действуют начиная с Windows Vista, но старый код и пути совместимости всё ещё могут демонстрировать этот контракт ошибок.

Проверьте срок жизни и владение блокировкой в старом коде настройки служб. Не храните SC_LOCK в усечённом целом числе, не разблокируйте дважды и не используйте значение повторно после очистки. Держите дескриптор SCM и блокировку в одной явно заданной области времени жизни и освобождайте только успешно полученную блокировку. В современных версиях Windows проектируйте код конфигурации с учётом штатной сериализации API SCM, а не используйте устаревшие предположения о блокировке базы данных как межпроцессный мьютекс.

Что проверить

  • Проследите успешный вызов LockServiceDatabase, создавший SC_LOCK.
  • Проверьте двойную разблокировку, устаревшие значения и усечение целого числа.
  • Не используйте старую блокировку SCM как примитив синхронизации приложения.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.