
- •Введение
- •1. Службы Windows.
- •1.1. Программа – служба
- •1.2. Три компонента сервиса
- •1.3. Диспетчер управления сервисами (scm)
- •1.4. Программы управления сервисами
- •1.5. Учетные зависи сервиса
- •1.6. Начало работы сервиса
- •1.7. Выполнение сервиса
- •2. Разработка сервиса Win32.
- •2.1. Структура программы сервиса
- •2.2. Протокол взаимодействия scm и сервиса
- •2.3. Пример функций сервиса.
- •Программа, осуществляющая установку сервиса.
- •Отладка сервиса.
- •Литература
- •Оглавление
Московский государственный технический университет
имени Н.Э.Баумана
Учебное пособие
В.А.Крищенко, Н.Ю.Рязанова
Сервисы Windows
Издательство МГТУ им. Н.Э.Баумана
УДК 681.3.06
ББК 32.81
К82
Сведения об авторах:
Крищенко Всеволод Александрович, к.т.н., доцент
Рязанова Наталья Юрьевна, к.т.н., доцент
Рецензенты:
Учебное пособие рекомендовано к опубликованию кафедрой ИУ-7 и
Аннотация
Рассматрены служебные программы операционных систем Windows NT/2000/XP/Vista (службы или сервисы Win32), работающие в режиме пользователя и занимающие в операционных системах Windows NT/2000/XP/Vista особое место. На службы Win32 возложены такие важнейшие системные функции как сохранения копий отдельных файлов, управление конфигурацией сети, загрузки и обновление Windows и т.п.
Рассотрены особенности работы, использования, установки и разработки сервисов Win32.
Для студентов 3-го и 4-го курсов кафедры «Программное обеспечение ЭВМ и информационные технологии» МГТУ им.Н.Э.Баумана.
Введение
В различных операционных системах существует разные способы выполнения служебных заданий одновременно с основной работой без снижения скорости интерактивного взаимодействия с пользователем. В операционных системах семейства Unix для этого существуют демоны, выполняемые в фоновом режиме. В ОС Windows возможность запуска процессов, не связанных с работой интерактивного пользователя, осуществляется службами или сервисами, которые используют функции интерфейса - Windows API и работают в режиме пользователя. Примером Windows-сервиса может служить Web-сервер, который должен запускаться при запуске системы и работать независимо от того, зарегистрировался ли в системе какой-либо пользователь.
Windows-сервисы являются частью операционной системы и взаимодействуют с SCP-приложением ( Service Control Program ) и диспетчером управления сервисами ( Service Control Manager - SCM ). В данном учебном пособии обсуждаются особенности работы и написания сервисных приложений режима пользователя, учетные записи сервисов и работа SCM.
1. Службы Windows.
1.1. Программа – служба
Сервис ОС Windows или служба (англ. Windows Service ) – это Win32 приложение, которое особым образом обрабатывается операционной системой (ОС). Службы Microsoft Windows, ранее называвшиеся службами NT, позволяют создавать исполняемые приложения, работающие длительное время и выполняющиеся в отдельной сессии Windows.
Основное отличие сервиса от обычного приложения заключается во взаимодействии сервиса с менеджером управления сервисами ( Service Control Manager – SCM ). Именно влияние SCM на работу сервиса определяет его особенности:
Сервис имеет определенную структуру, которая позволяет ему принимать информацию и команды от SCM.
Сервис в общем случае не является последовательно исполняемой программой, так как имеет несколько точек входа, т.е. содержит функции, вызываемые в ответ на определенные события в системе.
Сервис может выполняться от имени любой учетной записи, при этом независимо от наличия вошедших в систему пользователей и их количества. Этот факт оказывает естественное влияние (т.е. влияние, не запрограммированное специально для сервисов, а являющееся следствием работы механизмов ОС, отвечающих за пользователей и их права) на принципы взаимодействия сервисами с операционной системой и другими программами.
К сожалению, термин «сервисы» (службы) используется фирмой Microsoft для обозначения совершенно разных программных средств Windows. Термин «сервисы» (службы) обозначает и драйверы устройств, и низкоуровневые сервисы ОС, такие как, NtCreateProcess, являющиеся внутрисистемными сервисами, и собственно сервисы, т.е. серверные приложения, являющиеся процессами пользовательского режима. Последние часто называют сервисами Win32. На множественность понятия «сервис» (service) в документации Windows обращают внимание Руссинович М. и Соломон Д. в своей книге «Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000» ( стр.6 )[3].
Как правило, Windows-сервис не имеет пользовательского интерфейса, что позволяет создавать сервис или как GUI-приложение ( с функцией WinMain ), или как консольное ( с функцией main ).
Сервис может быть запущен несколькими способами:
- автоматически при загрузке системы,
- пользователем через панель управления сервисами,
- с помощью специально написанного приложения,
- путем вызова функций управления сервисами.
Запущенный одним из перечисленных способов процесс может содержать в себе несколько сервисов, выполняющихся в различных потоках. Например, сервис Services.exe содержит около 10 других сервисов, включая такие сервисы как DHCP Client, Messenger и Alerter. Потоки не имеют собственного адресного пространства и разделяют адресное пространство своего процесса. Запуск каждого процесса связан с переключением полного контекста, что является расточительным с точки зрения временных затрат. Переключение потоков выполняется значительно быстрее. Но такая оптимизация имеет один недостаток – SCM позволяет таким сервисам работать только от имени системы. Другими словами, в настройках сервиса нельзя указать другие имя пользователя и пароль.
Управление сервисами можно осуществлять программно, обращаясь к предоставляемому SCM API, либо через соответствующую оснастку консоли управления ( Microsoft Manager Consol – MMC ).