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



         

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


    // В ответ на другие команды просто возвращаем

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

    default:

    {

      ReportStatus(ss.dwCurrentState, NOERROR, 0);

      break;

    }

  }

}

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

// Функция ReportStatus

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

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

void ReportStatus(DWORD dwCurrentState,

       DWORD dwWin32ExitCode, DWORD dwWaitHint)

{

  // Счетчик шагов длительных операций

  static DWORD dwCheckPoint = 1;

  // Если сервис не находится в процессе запуска,

  // его можно остановить

  if(dwCurrentState == SERVICE_START_PENDING)

    ss.dwControlsAccepted = 0;

  else

    ss.dwControlsAccepted = SERVICE_ACCEPT_STOP;

  // Сохраняем состояние, переданное через

  // параметры функции

  ss.dwCurrentState  = dwCurrentState;

  ss.dwWin32ExitCode = dwWin32ExitCode;

  ss.dwWaitHint      = dwWaitHint;

  // Если сервис не работает и не остановлен,

  // увеличиваем значение счетчика шагов

  // длительных операций

  if((dwCurrentState == SERVICE_RUNNING)

     (dwCurrentState == SERVICE_STOPPED))

    ss.dwCheckPoint = 0;

  else

    ss.dwCheckPoint = dwCheckPoint++;

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

  SetServiceStatus(ssHandle, &ss);

}

В файле small.h (листинг 5.2) определено имя сервиса MYServiceName и прототипы функций.

Листинг 5.2. Файл service/small/small.h

#define MYServiceName "Sample of simple service"

void WINAPI ServiceMain(DWORD dwArgc, LPSTR *lpszArv);

void WINAPI ServiceControl(DWORD dwControlCode);

void ReportStatus(DWORD dwCurrentState,

        DWORD dwWin32ExitCode, DWORD dwWaitHint);




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