В ответ на другие команды
// В ответ на другие команды просто возвращаем
// текущее состояние сервиса
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);
Содержание Назад Вперед