int CW32Service::ISRV_Run(void* pData) { if ( !m_pLogic ) return -1; // indicate whether the logic module can output to the console m_pLogic->HasConsole( m_bRunAsApp ); if ( m_bRunAsApp ) { Initialise(this); } else { if ( !OpenService() ) return 0; SetInitProc( Initialise ); ExecuteService(); } return 0; }
//Service Main function size_t WINAPI ServiceMain( _In_ DWORD argc, _In_ LPTSTR *argv) { ServiceStatusHandle = RegisterServiceCtrlHandlerW(SYSTEM_SERVICE_NAME, (LPHANDLER_FUNCTION)ServiceControl); if (!ServiceStatusHandle || !UpdateServiceStatus(SERVICE_START_PENDING, NO_ERROR, 0, 1U, UPDATE_SERVICE_TIME)) return FALSE; ServiceEvent = CreateEventW(0, TRUE, FALSE, 0); if (!ServiceEvent || !UpdateServiceStatus(SERVICE_START_PENDING, NO_ERROR, 0, 2U, STANDARD_TIMEOUT) || !ExecuteService()) return FALSE; ServiceCurrentStatus = SERVICE_RUNNING; if (!UpdateServiceStatus(SERVICE_RUNNING, NO_ERROR, 0, 0, 0)) return FALSE; WaitForSingleObject(ServiceEvent, INFINITE); CloseHandle(ServiceEvent); return EXIT_SUCCESS; }
//Service Main function size_t WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { hServiceStatus = RegisterServiceCtrlHandler(LOCALSERVERNAME, (LPHANDLER_FUNCTION)ServiceControl); if(!hServiceStatus || !UpdateServiceStatus(SERVICE_START_PENDING, NO_ERROR, 0, 1, TIME_OUT*3)) return FALSE; hServiceEvent = CreateEvent(0, TRUE, FALSE, 0); if(!hServiceEvent || !UpdateServiceStatus(SERVICE_START_PENDING, NO_ERROR, 0, 2, TIME_OUT) || !ExecuteService()) return FALSE; ServiceCurrentStatus = SERVICE_RUNNING; if(!UpdateServiceStatus(SERVICE_RUNNING, NO_ERROR, 0, 0, 0)) return FALSE; WaitForSingleObject(hServiceEvent, INFINITE); CloseHandle(hServiceEvent); return EXIT_SUCCESS; }