Поделиться через


Функция 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. Дополнительные сведения о удаленном подключении к службам см. в разделе Services и RPC/TCP.

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

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

Примеры

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

Заметка

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2003 [только классические приложения]
целевая платформа Виндоус
заголовка winsvc.h (включая Windows.h)
библиотеки Advapi32.lib
DLL Advapi32.dll

См. также

CloseServiceHandle

CreateService

EnumServicesStatusEx

OpenService

обработчики SCM

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