Получение идентификатора системы управления сервисами
Идентификатор системы управления сервисами нужен для выполнения различных операций над сервисами, таких например, как установка сервиса. Вы можете получить этот идентификатор с помощью функции OpenSCManager:
SC_HANDLE OpenSCManager(
LPCTSTR lpszMachineName, // адрес имени рабочей станции
LPCTSTR lpszDatabaseName, // адрес имени базы данных
DWORD fdwDesiredAccess); // нужный тип доступа
Задавая имя рабочей станции через параметр lpszMachineName, вы можете получить идентификатор системы управления сервисами на любом компьютере сети. Для локального компьютера необходимо указать значение NULL.
Для наших примеров параметр lpszDatabaseName, определяющий имя базы данных системы управления сервисами, нужно указать как NULL. При этом по умолчанию будет использована база данных активных сервисов ServicesActive.
Через параметр fdwDesiredAccess нужно задать требуемый тип доступа. Здесь можно использовать следующие константы:
Константа | Разрешенный тип доступа | ||
SC_MANAGER_ALL_ACCESS | Полный доступ | ||
SC_MANAGER_CONNECT | Подключение к системе управления сервисами | ||
SC_MANAGER_CREATE_SERVICE | Создание новых сервисов и добавление их к регистрационной базе данных | ||
SC_MANAGER_ENUMERATE_SERVICE | Просмотр списка всех установленных сервисов при попщи функции EnumServicesStatus (в нашей книге эта функция и следующие две функции не описаны) | ||
SC_MANAGER_LOCK | Блокирование базыв данных функцией LockServiceDatabase | ||
SC_MANAGER_QUERY_LOCK_STATUS | Определение состояние блокировки базы данных функцией QueryServiceLockStatus |
Ниже мы привели пример вызова функции OpenSCManager:
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
После использования вы должны закрыть идентификатор, полученный от функции OpenSCManager. Для этого необходимо вызвать функцию CloseServiceHandle:
CloseServiceHandle(schSCManager);