15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Функция OpenSCManager.

Функция OpenSCManager устанавливает связь с менеджером управления сервисами и открывает его базу данных.

SC_HANDLE OpenSCManager(
  LPCTSTR lpMachineName,
  LPCTSTR lpDatabaseName,
  DWORD dwDesiredAccess
);

Параметры

lpMachineName
Указатель на строку (завершающуюся нулём), содержащую имя компьютера. Если этот параметр равен NULL или указывает на пустую строку, то функция коннектится к менеджеру управления сервисами на локальной машине.
lpDatabaseName
Указатель на строку (завершающуюся нулём), которая содержит имя открываемой базы данных менеджера управления сервисами. Этот параметр должен быть равен SERVICES_ACTIVE_DATABASE. Если этот параметр приравнять NULL, то по умолчанию будет открыта база SERVICES_ACTIVE_DATABASE.
dwDesiredAccess
Права доступа к менеджеру управления сервисами. Полный список прав можно посмотреть здесь: Service Security and Access Rights.

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

По умолчанию, при вызове этой функции установлено право SC_MANAGER_CONNECT.

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

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

В случае ошибки, функция вернёт NULL. Для получения более подробной информации об ошибке см. функцию GetLastError.

Стандартные коды ошибок, возвращаемые SCM приведены в таблице:

 

Значение Описание
ERROR_ACCESS_DENIED Доступ с указанными правами запрещён.
ERROR_DATABASE_DOES_NOT_EXIST Указанная база данных не существует.
ERROR_INVALID_PARAMETER Не правильный параметр.


Заметки

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

Windows 2000 и ранние версии: Все процессы имею следующие права на доступ к базе: SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, и SC_MANAGER_QUERY_LOCK_STATUS. Тем самым, любому процессу разрешается открыть базу менеджера управления сервисами, получить её дескриптор и использовать его в функциях OpenService, EnumServicesStatus, и QueryServiceLockStatus.

Windows XP: Правами SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, и SC_MANAGER_QUERY_LOCK_STATUS могут воспользоваться только авторизованные пользователи.

Использовать функции CreateService и LockServiceDatabase могут только процессы имеющие права Администратора.

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

Пример

См. Открытие базы данных SCManager.

Дополнительная информация

Windows NT/2000/XP: Присутствует начиная с Windows NT 3.1.
Unicode: Существует как Unicode, так и ANSI версия функции.
Заголовок: Объявлена в Winsvc.h; включена в Windows.h.
Библиотека: Advapi32.lib.