21#define WIN32_LEAN_AND_MEAN
43 DWORD dwServiceSpecificExitCode)
48 status.dwCurrentState = dwCurrentState;
53 status.dwControlsAccepted = 0;
61 if (dwServiceSpecificExitCode == 0)
63 status.dwWin32ExitCode = dwWin32ExitCode;
70 status.dwServiceSpecificExitCode = dwServiceSpecificExitCode;
128 report_error(
"Failed to register service ctrl handler\n");
static SERVICE_STATUS_HANDLE(WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR
static char service_name[100]
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static BOOL StartServiceThread(void)
static void WINAPI ServiceMain(DWORD argc, LPSTR *argv)
static DWORD WINAPI ServiceExecutionThread(LPVOID param)
static void KillService(void)
static BOOL UpdateSCMStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServiceSpecificExitCode)
static SERVICE_STATUS_HANDLE hstatus
static void WINAPI ServiceCtrlHandler(DWORD code)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
void report_error(const char *msg,...)
BOOL WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA *lpServiceStartTable)
SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR lpServiceName, LPHANDLER_FUNCTION lpHandlerProc)
BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define ERROR_SERVICE_SPECIFIC_ERROR
#define SERVICE_ACCEPT_STOP
#define SERVICE_STOP_PENDING
#define SERVICE_CONTROL_SHUTDOWN
#define SERVICE_START_PENDING
#define SERVICE_ACCEPT_PAUSE_CONTINUE
#define SERVICE_CONTROL_STOP
#define SERVICE_ACCEPT_SHUTDOWN
#define SERVICE_WIN32_OWN_PROCESS