Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Структура программы сервиса

Читайте также:
  1. I. Образовательные программы.
  2. I. Общая структура Ig
  3. I. ПРОГРАММЫ БАКАЛАВРИАТА
  4. II. Назначение программы
  5. II. Организационно-педагогические условия реализации программы
  6. II. Структура и состав кадастровых сведений Реестра объектов недвижимости
  7. II. СТРУКТУРА КРИЗИСА

Любой сервис должен содержать три основные функции, которые принято называть точками входа*):

· Функцию WinMain (main), которая является точкой входа процесса. При поступлении в SCM запроса на запуск сервиса, SCM производит запуск программы сервиса на выполнение. В этот момент вызывается точка входа main. Функция main принимает аргументы из командной строки обычным образом: например, void __cdecl _tmain(int argc, TCHAR *argv[]) и выполняет соответствующие действия – если в параметре argv[1] содержится строка “install”, то сервис возможно будет запущен SCM.

Функцию ServiceMain, которая вызывается операционной системой, является функцией обратного вызова (callback-функцией) и содержит код, инициирующий работу сервиса. Функция может иметь любое имя, но должна соответствовать прототипу:

VOID WINAPI ServiceMain(__in DWORD dwArgc, __in LPTSTR *lpszArgv);

Параметры:

dwArgc

Количество аргументов в параметре lpszArgv. Если аргументов нет, то этот параметр может быть нулевым.

lpszArgv [] – массив строк.

Усли аргументы есть, то первый аргумент (lpszArgv [0]) это - имя службы, следующие за ней строки передаются в службу функцией StartService, которая запускает службы.

Подключаемая библиотека windows.h

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

Функцию Handler, которая является функцией обратного вызова. Работает совместно с функцией RegisterServiceCtrlHandler () и должна иметь следующий прототип: VOID WINAPI Handler(__in DWORD fdwControl);

Эта функция была заменена HandlerEx, которая используется совместно с RegisterServiceCtrlHandlerEx () и имеет следующий прототип:

DWORD WINAPI HandlerEx(

__in DWORD dwControl,

__in DWORD dwEventType,

__in LPVOID lpEventData,

__in LPVOID lpContext);

Подключаемая библиотека windows.h.

Для каждого сервиса необходимо определить отдельню функцию Handler. SCM вызывает функцию Handler для изменения статуса сервиса. Например, если пользователь, используя SCP-апплет, останавливает сервис, функция Handler сервиса получает уведомление SERVICE_CONTROL_STOP. Функция Handler ответственна за действия, необходимые для безопасной остановки сервиса. Основной поток процесса запускает на выпонение все функции Handler, имеющиеся в исполняемом файле. Необходимо так реализовать код функции Handler, чтобы она выполнялась как можно быстрее и чтобы другие функции Handler, имеющиеся в исполняемом файле, получили возможность на выполнение в течение заданного отрезка времени. Поскольку функция Handler запускается основным потоком процесса, а сервис выполняется другим потоком, то данная функция должна содержать механизм, обеспечивающий передачу информации об изменении статуса сервиса от одного потока другому. Стандартного решения для создания такого рода механизма не существует. Все зависит от реализации сервиса, от работы, которую он выполняет. Вы можете создать очередь асинхронных вызовов (asynchronous procedure call - RPC), послать статус завершения или использовать функцию посылки сообщений в систему, и т.п.


Дата добавления: 2015-08-13; просмотров: 58 | Нарушение авторских прав


Читайте в этой же книге: Службы Windows. | Диспетчер управления сервисами (SCM) | Программы управления сервисами | Учетные зависи сервиса | Начало работы сервиса | Точка входа в сервис (ServiceMain) | Пример функций сервиса. | Отладка сервиса. |
<== предыдущая страница | следующая страница ==>
Выполнение сервиса| Точка входа main

mybiblioteka.su - 2015-2024 год. (0.006 сек.)