Функция OpenSCManagerA (winsvc.h)

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

Синтаксис

SC_HANDLE OpenSCManagerA(
  [in, optional] LPCSTR lpMachineName,
  [in, optional] LPCSTR lpDatabaseName,
  [in]           DWORD  dwDesiredAccess
);

Параметры

[in, optional] lpMachineName

Имя конечного компьютера. Если указатель имеет значение NULL или указывает на пустую строку, функция подключается к диспетчеру управления службами на локальном компьютере.

[in, optional] lpDatabaseName

Имя базы данных диспетчера управления службами. Этот параметр должен иметь значение SERVICES_ACTIVE_DATABASE. Если имеет значение NULL, база данных SERVICES_ACTIVE_DATABASE открывается по умолчанию.

[in] dwDesiredAccess

Доступ к диспетчеру управления службами. Список прав доступа см. в разделе Безопасность служб и права доступа.

Перед предоставлением запрошенных прав доступа система проверяет маркер доступа вызывающего процесса в соответствии со списком управления доступом по усмотрению дескриптора безопасности, связанного с диспетчером управления службами.

Право доступа SC_MANAGER_CONNECT неявно задается путем вызова этой функции.

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение является дескриптором указанной базы данных диспетчера управления службами.

Если функция завершается сбоем, возвращается значение NULL. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

SCM может задать следующие коды ошибок. Другие коды ошибок могут быть заданы функциями реестра, которые вызываются SCM.

Код возврата Описание
ERROR_ACCESS_DENIED
Запрошенный доступ был отклонен.
ERROR_DATABASE_DOES_NOT_EXIST
Указанная база данных не существует.

Комментарии

Если процесс использует функцию OpenSCManager для открытия дескриптора для базы данных диспетчера управления службами, система выполняет проверка безопасности перед предоставлением запрошенного доступа. Дополнительные сведения см. в разделе Безопасность службы и права доступа.

Если у текущего пользователя нет надлежащего доступа при подключении к службе на другом компьютере, вызов функции OpenSCManager завершается ошибкой. Чтобы подключиться к службе удаленно, вызовите функцию LogonUser с LOGON32_LOGON_NEW_CREDENTIALS, а затем вызовите ImpersonateLoggedOnUser перед вызовомOpenSCManager. Дополнительные сведения о удаленном подключении к службам см. в разделе Службы и RPC/TCP.

Только процессы с правами администратора могут открывать дескриптор базы данных, который может использоваться функцией CreateService .

Возвращенный дескриптор действителен только для процесса, который вызвал функцию OpenSCManager . Его можно закрыть, вызвав функцию CloseServiceHandle .

Примеры

Пример см. в разделе Изменение конфигурации службы.

Примечание

Заголовок winsvc.h определяет OpenSCManager в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winsvc.h (включая Windows.h)
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

CloseServiceHandle

CreateService

EnumServicesStatusEx

OpenService

Дескрипторы SCM

Функции службы