#define daemon_h
#include <windows.h>
static SERVICE_STATUS daemon_status;;
static SERVICE_STATUS_HANDLE daemon_handle;
static DWORD deamon_argc;
static char** daemon_argv;
extern const char* daemon_name;
static void WINAPI daemon_ctrl(DWORD dwControl){
switch (dwControl){
case SERVICE_CONTROL_PAUSE:
daemon_status.dwCurrentState = SERVICE_PAUSE_PENDING;
SetServiceStatus(daemon_handle, &daemon_status);
daemon_status.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
daemon_status.dwCurrentState = SERVICE_CONTINUE_PENDING;
SetServiceStatus(daemon_handle, &daemon_status);
daemon_status.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_STOP:
daemon_status.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus(daemon_handle, &daemon_status);
daemon_status.dwCurrentState = SERVICE_STOPPED;
break;
case SERVICE_CONTROL_SHUTDOWN:
break;
case SERVICE_CONTROL_INTERROGATE:
daemon_status.dwCurrentState = SERVICE_RUNNING;
break;
}
SetServiceStatus(daemon_handle, &daemon_status);
}
static int daemon_initialize(){
daemon_status.dwServiceType = SERVICE_WIN32;
daemon_status.dwCurrentState = SERVICE_START_PENDING;
daemon_status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
daemon_status.dwWin32ExitCode = 0;
daemon_status.dwServiceSpecificExitCode = 0;
daemon_status.dwCheckPoint = 0;
daemon_status.dwWaitHint = 0;
daemon_handle = RegisterServiceCtrlHandler(daemon_name, daemon_ctrl);
if(daemon_handle == 0){
return -1;
}
daemon_status.dwCheckPoint = 0;
daemon_status.dwWaitHint = 0;
daemon_status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(daemon_handle, &daemon_status);
return 0;
}
#define main /
main(int argc, char* argv[]){ /
deamon_argc = argc; /
daemon_argv = argv; /
void WINAPI daemon_wrapper(DWORD argc, char* argv[]); /
SERVICE_TABLE_ENTRY service_table_entry[] = /
{ /
{(char *) daemon_name, daemon_wrapper}, /
{0, 0} /
}; /
StartServiceCtrlDispatcher(service_table_entry); /
} /
/
void WINAPI daemon_wrapper(DWORD argc, char* argv[]){ /
if(-1 == daemon_initialize()){ /
return; /
} /
extern int daemon_main(int argc, char* argv[]); /
daemon_main((int) deamon_argc, daemon_argv); /
} /
int daemon_main
#endif
97

被折叠的 条评论
为什么被折叠?



