Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сервисы Windows (120

..pdf
Скачиваний:
4
Добавлен:
15.11.2022
Размер:
985.44 Кб
Скачать

Московский государственный технический университет имени Н.Э. Баумана

В.А. Крищенко, Н.Ю. Рязанова

СЕРВИСЫ WINDOWS

Рекомендовано Научно-методическим советом МГТУ им. Н.Э. Баумана в качестве учебного пособия по курсам

«Системное программирование – введение в операционные системы» è «Управление устройствами»

Москва Издательство МГТУ им. Н.Э. Баумана

2011

ÓÄÊ 681.3.06 ÁÁÊ 32.81

Ê82

Рецензенты:

А. А. Рощин, Н. В. Лукьянова

Крищенко В. А.

К82 Сервисы Windows : учеб. пособие / В.А. Крищенко, Н.Ю. Рязанова. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2011. – 47, [1] с.: ил.

Рассмотрены служебные программы (службы) операционных систем (ОС) Windows NT/2000/XP/Vista, работающие в режиме пользователя и занимающие в ОС Windows NT/2000/XP/Vista особое место. На службы Win32 возложены такие важнейшие системные функции, как сохранение копий отдельных файлов, управление конфигурацией сети, загрузки и обновления ОС Windows и т. п. Рассмотрены особенности работы, использования, установки и разработки служб Win32.

Для студентов 3-го и 4-го курсов, обучающихся на кафедре «Программное обеспечение ЭВМ и информационные технологии» МГТУ им. Н.Э. Баумана.

ÓÄÊ 681.3.06

ÁÁÊ 32.81

© МГТУ им. Н.Э. Баумана, 2011

Введение

В различных операционных системах (ОС) используются разные способы выполнения служебных заданий одновременно с основной работой без снижения скорости интерактивного взаимодействия с пользователем. В ОС семейства Unix для этого существуют демоны, выполняемые в фоновом режиме. В ОС Windows возможность запуска процессов, не связанных с работой интерактивного пользователя, осуществляется службами, или сервисами, в которых используются функции интерфейса (Win32 API*) и которые работают в режиме пользователя.

Заметим, что, к сожалению, термин «сервис» используется фирмой Microsoft для обозначения совершенно разных программных средств ОС Windows. Этот термин обозначает и драйверы устройств, и низкоуровневые сервисы ОС, такие как NtCreateProcess, являющиеся внутрисистемными сервисами, и собственно сервисы, т. е. серверные приложения, являющиеся процессами пользовательского режима. Последние часто называют сервисами Win32. На множественность понятия «сервис» в документации Windows обращают внимание М. Руссинович и Д. Соломон [1, с. 6]. Примером Windows-сервиса может служить Web-сервер, который должен запускаться при запуске ОС и работать независимо от того, зарегистрировался ли в ней какой-либо пользователь.

Windows-сервисы являются частью ОС и взаимодействуют с SCP-приложением (Service Control Program – программа управления сервисами) и диспетчером управления сервисами (Service Control Manager – SCM). В учебном пособии обсуждаются особенности работы и написания сервисных приложений режима пользователя, учетные записи сервисов и работа SCM.

* API (Application Interface Functions) – функция прикладного интерфейса.

3

1.СЛУЖБЫ WINDOWS

1.1.Программа – служба

Сервис, или служба, ОС Windows (Windows Service) – это Win32приложение, которое особым образом обрабатывается ОС. Службы Microsoft Windows, ранее называвшиеся службами NT, позволяют создавать исполняемые приложения, работающие длительное время и выполняющиеся в отдельной сессии ОС Windows.

Основное отличие сервиса от обычного приложения заключается во взаимодействии его с SCM. Именно влияние SCM на работу сервиса определяет его особенности:

сервис имеет определенную структуру, которая позволяет ему принимать информацию и команды от SCM;

сервис в общем случае не является последовательно исполняемой программой, так как имеет несколько точек входа, т. е. содержит функции, вызываемые в ответ на определенные события в ОС;

сервис может выполняться от имени любой учетной записи независимо от наличия вошедших в систему пользователей и их числа. Этот факт оказывает влияние, не запрограммированное специально для сервисов, а являющееся следствием работы механизмов ОС, отвечающих за пользователей и их права, на принципы взаимодействия сервисов с ОС и другими программами.

Как правило, Windows-сервис не имеет пользовательского интерфейса, что позволяет создавать сервис или как GUI*-приложение (с функцией WinMain), или как консольное приложение (с функцией main).

Сервис может быть запущен несколькими способами:

автоматически при загрузке ОС;

пользователем через панель управления сервисами;

* GUI (Graphic User Interface) – графический интерфейс пользователя.

4

с помощью специально написанного приложения;

путем вызова функций управления сервисами.

Запущенный одним из перечисленных способов процесс может содержать в себе несколько сервисов, выполняющихся в различных потоках. Например, сервис Services.exe содержит около 10 других сервисов, в том числе сервисы DHCP Client, Messenger и Alerter. Потоки не имеют собственного адресного пространства и разделяют адресное пространство своего процесса. Запуск каждого процесса связан с переключением полного контекста, что расточительно с точки зрения временных затрат. Переключение потоков выполняется значительно быстрее. Но подобная оптимизация имеет один недостаток – SCM позволяет таким сервисам работать только от имени ОС. Другими словами, в настройках сервиса нельзя указать другие имя пользователя и пароль.

Управление сервисами можно осуществлять программно, обращаясь к предоставляемой SCM API, либо через соответствующую оснастку консоли управления (Microsoft Manager Console – MMC).

1.2. Три компонента сервиса

Для работы сервисов предназначены три вида компонентов ОС Windows.

1.SCM, исполняемый файл которого \Windows\System32\ Services.exe является консольным приложением. Процесс запускается автоматически в момент начальной загрузки ОС и прекращает работу в момент ее выгрузки. Очевидно, что SCM-процесс запускается с привилегиями ОС и предоставляет унифицированный и безопасный интерфейс сервисам системы. Задача SCM – управлять сервисами: запускать, настраивать, приостанавливать, продолжать и завершать их работу.

2.Сам сервис, по сути являясь Win32-приложением, содержит дополнительный код, позволяющий ему принимать информацию и команды от SCM и возвращать ему статусную информацию.

3.SCP-приложение – это Win32-приложение, которое предоставляет пользователю графический интерфейс для работы с сервисами. Такая программа позволяет пользователю управлять работой сервиса: запускать, приостанавливать, возобновлять и

5

останавливать его работу. Поскольку SCM является RPC*-серве- ром, то SCP-приложение может взаимодействовать с ним удаленно. Администратор, используя SCP-приложение на одном компьютере, может посредством SCM другого компьютера управлять работой на нем сервисов. Для этого в SCP-приложении используются специальные функции управления сервисом, позволяющие обращаться к SCM.

1.3. Особенности SCM

Сервисы, рассматриваемые в этом учебном пособии, – это процессы режима пользователя. Они похожи на процессы-демоны Unix

èмогут быть запущены автоматически при запуске ОС. Этими сервисами управляет специальный системный процесс – SCM (\Windows\System32\Services.exe), отвечающий за запуск, остановку

èвзаимодействие с процессами сервисов. Другими словами, SCM исполняется в процессе Services.exe и является консольным Win32-приложением. Место SCM в архитектуре ОС Windows показано на рис. 1.

Для взаимодействия SCM с сервисами ОС Windows предоставляет специальные API-функции, с помощью которых выполняются такие действия, как регистрация успешного запуска сервиса, ответы на запросы о состоянии сервиса, приостановка или завершение работы сервиса.

Процесс Winlogon запускает SCM на начальном этапе загрузки ОС вызовом функции SvcCtrlMain. Функция SvcCtrlMain создает синхронизирующее событие с именем SvcCtrlEvent_A3752DX и устанавливает для него состояние «занято». Затем функция SvcCtrlMain вызывает функцию SvcCreateServiceDB, которая создает базу данных сервисов SCM. Функция SvcCreateServiceDB считывает и сохраняет в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\ServiceGroupOrder в параметре List типа REG_MULTI_SZ список имен и порядок определенных групп сервисов. Если сервису или драйверу нужно отслеживать порядок запуска относительно других групп, то в раздел реестра этого сервиса включается параметр Group.

* RPC (Remote Procedure Call) – вызов удаленной процедуры.

6

. 1. Windows

В разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\Services находится база данных SCM (рис. 2). Для каждого установленного драйвера и сервиса создается запись, содержащая следующую информацию.

Тип сервиса. Необходим для того, чтобы различать сервисы уровня пользователя и драйверы. Для сервисов уровня пользователя

âтипе указывается, выполняется ли сервис в собственном процессе или разделяет адресное пространство процесса с другими сервисами. Для драйвера указывается, является ли он драйвером ядра или драйвером файловой системы.

Способ запуска (автоматически при старте ОС, по запросу приложения, управляющего сервисом, либо запрет запуска). В системе могут быть установлены три значения для этого поля: Авто (Automatic), Вручную (Manual), Отключено (Disabled).

Уровнь контроля ошибок. Указывает на серьезность ошибки, если служба или драйвер не запускается при запуске ОС, и определяет действия в случае аварийного завершения сервиса или ошибки при запуске (отсутствие действий, перезапуск сервиса или перезапуск ОС).

Полный путь к исполняемому файлу (т. е. путь к программе сервиса – файлу с расширением .EXE или драйверу с расширением .SYS).

Информация о зависимостях, т. е. о том, какие сервисы должны быть запущены до запуска данного сервиса. Для драйвера эта информация включает в себя список драйверов, которые должны быть запущены до указанного драйвера.

Имя учетной записи и пароль. Сервис выполняется в контексте указанной учетной записи. Если учетная запись не указана, то сервис выполняется в контексте учетной записи LocalSystem.

Для драйверов дополнительно указываются имя объекта драйвера (например, \FileSystem\Rdr или \Driver\XNS) и используемая система ввода/вывода для загрузки драйвера устройства. Если имя не задано, то система ввода/вывода создает имя по умолчанию на основе службы имен драйверов.

Ñпомощью SCP-апплета* можно установить или изменить тип запуска. Кроме этого можно посмотреть, под чьей учетной записью запускается сервис на вкладке «Вход в систему» (Log On).

* Апплет (applet, от application) – зд. прикладная мини-программа, утилита.

8

Ðèñ. 2. Редактор реестра. Просмотр ключа

Базу данных сервисов не рекомендуется изменять самостоятельно (с помощью функций работы с реестром). Вместо этого следует обращаться к API-функциям, предоставляемым SCM.

Перед запуском автоматически запускаемых сервисов (как и драйверов) SCM выполняет еще несколько действий: создает именованный канал RPC с именем \Pipe\Ntsvcs; после этого RPC запускает поток, отслеживающий приходящие по этому каналу сообщения от SCP; затем SCM освобождает свой объект типа события SvcCtrlEvent_A3752DX, сигнализируя о завершении инициализации. SCP устанавливает связь с SCM с помощью функции OpenSCManager, которая ждет перехода события SvcCtrlEvent_A3752DX в свободное состояние.

1.4. Программы управления сервисами

Для управления сервисами SCP использует API-функции, предоставляемые SCM: CreateServise, OpenService, StartService, ControlService, QueryServiceStatus, DeleteService. Для связи с SCM в SCP-приложении используется канал, созданный SCM, а связь устанавливается функцией OpenSCManager:

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

Параметры вызова функции:

lpMachineName. Указатель на строку (завершающуюся нулем), содержащую имя компьютера. Если этот параметр равен NULL или указывает на пустую строку, то функция подключается к SCM на локальной машине;

lpDatabaseName. Указатель на строку (завершающуюся нулем), которая содержит имя открываемой базы данных SCM. Этот параметр должен быть равен SERVICES_ACTIVE_DATABASE. Если этот параметр приравнять NULL, то по умолчанию будет открыта база SERVICES_ACTIVE_DATABASE;

dwDesiredAccess. Указывает права доступа к SCM. Перед тем как разрешить доступ с запрошенными правами, ОС проверяет права запросившего процесса и сверяет их со списком в SCM. По умол- чанию при вызове функции OpenSCManager установлено право SC_MANAGER_CONNECT.

При запросе на открытие канала связи SCP-приложение должно указать выполняемые действия. Например, если SCP-приложение

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]