Исходный текст сервиса представлен в листинге 5.1. Так как ранее мы уже подробно описывали структуру этого сервиса, то мы оставим вам этот листинг и листинг приложения SRVCTRL на самостоятельное изучение.
Листинг 5.1. Файл service/small/small.c
// ==================================================
// Сервис "Sample of simple service"
// Шаблон простейшего сервиса Windows NT
//
// (С) Фролов А.В., 1996
// Email: frolov@glas.apc.org
// ==================================================
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "small.h"
// -----------------------------------------------------
// Глобальные переменные
// -----------------------------------------------------
// Код ошибки
DWORD dwErrCode;
// Текущее состояние сервиса
SERVICE_STATUS ss;
// Идентификатор сервиса
SERVICE_STATUS_HANDLE ssHandle;
// -----------------------------------------------------
// Функция main
// Точка входа процесса
// -----------------------------------------------------
void main(int agrc, char *argv[])
{
// Таблица точек входа
SERVICE_TABLE_ENTRY DispatcherTable[] =
{
{
// Имя сервиса
MYServiceName,
// Функция main сервиса
(LPSERVICE_MAIN_FUNCTION)ServiceMain
},
{
NULL,
NULL
}
};
printf("Sample of simple service\n"
"(C) A. Frolov, 1996, Email: frolov@glas.apc.org\n");
// Запуск диспетчера
if(!StartServiceCtrlDispatcher(DispatcherTable))
{
fprintf(stdout,
"StartServiceCtrlDispatcher: Error %ld\n",
GetLastError());
getch();
return;
}
}
// -----------------------------------------------------
// Функция ServiceMain
// Точка входа сервиса
// -----------------------------------------------------