Вообще-то службы пишутся как консольные приложения. Точка входа консольного приложения - его функция main. Функция main получает параметры из значения ImagePath ключа реестра для службы. За дополнительной информацией обратитесь к разделу Замечаний функции CreateService.
Когда Диспетчер управления службами (SCM) запускает сервисную программу, он ждет того, чтобы вызвать функцию StartServiceCtrlDispatcher. Используйте следующие рекомендации.
Функция StartServiceCtrlDispatcher получает структуру SERVICE_TABLE_ENTRY для каждой службы, содержащейся в процессе. Каждая структура определяет имя службы и точку входа для неё.
Если StartServiceCtrlDispatcher завершается успешно, вызывающий поток не возвращает значение до тех пор, пока все запущенные службы в процессе не завершат работу. Диспетчер управления службами (SCM) отправляет управляющие запросы этому потоку через именованный канал. Поток действует как диспетчер управления, выполняя следующие задачи:
Дополнительную информацию смотри в статье Запись главной функции сервисной программы.