Программирование для Windows NT (том 2)

       

Получение идентификатора системы управления сервисами


Идентификатор системы управления сервисами нужен для выполнения различных операций над сервисами, таких например, как установка сервиса. Вы можете получить этот идентификатор с помощью функции 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);



Содержание раздела