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



         

Исходный текст сервиса - часть 2


void WINAPI ServiceMain(DWORD argc, LPSTR *argv)

{

  // Регистрируем управляющую функцию сервиса

  ssHandle =

    RegisterServiceCtrlHandler(MYServiceName, ServiceControl);

  if(!ssHandle)

    return;

  // Устанавливаем состояние сервиса

 

  // Сервис работает как отдельный процесс

  ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;

  // Код ошибки при инициализации и завершения сервиса

  // не используется

  ss.dwServiceSpecificExitCode = 0;

  // Начинаем запуск сервиса.

  // Прежде всего устанавливаем состояние ожидания

  // запуска сервиса

  ReportStatus(SERVICE_START_PENDING, NO_ERROR, 4000);

 

  // Вызываем функцию, которая выполняет все

  // необходимые инициализирующие действия

  //  ServiceStart(argc, argv);

  // После завершения инициализации устанавливаем

  // состояние работающего сервиса

  ReportStatus(SERVICE_RUNNING, NOERROR, 0);

  return;

}

// -----------------------------------------------------

// Функция ServiceControl

// Точка входа функции обработки команд

// -----------------------------------------------------

void WINAPI ServiceControl(DWORD dwControlCode)

{

  // Анализируем код команды и выполняем эту команду

  switch(dwControlCode)

  {

    // Команда остановки сервиса

    case SERVICE_CONTROL_STOP:

    {

      // Устанавливаем состояние ожидания остановки

      ss.dwCurrentState = SERVICE_STOP_PENDING;

      ReportStatus(ss.dwCurrentState, NOERROR, 0);

      // Выполняем остановку сервиса, вызывая функцию,

      // которая выполняет все необходимые для этого действия

      // ServiceStop();

      // Отмечаем состояние как остановленный сервис

      ReportStatus(SERVICE_STOPPED, NOERROR, 0);

      break;

    }

    // Определение текущего состояния сервиса

    case SERVICE_CONTROL_INTERROGATE:

    {

      // Возвращаем текущее состояние сервиса

      ReportStatus(ss.dwCurrentState, NOERROR, 0);

      break;

    }




Содержание  Назад  Вперед