- 论坛徽章:
- 11
|
- #ifndef daemon_h
- #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
复制代码 回复 1# ddgfff
|
|