Функция 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.
|