X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=w32svrapi.c;h=71f29461b8a15c6780c75b03eb697ee60588cf95;hp=e6f236389d9352cf9546bf4a9968aea0c5e154fe;hb=960ae61d1bce3289d3a79290a3d0c583620c2414;hpb=f1509beb2fa10e04be0cb69cf52c57c699b649b7 diff --git a/w32svrapi.c b/w32svrapi.c index e6f23638..71f29461 100644 --- a/w32svrapi.c +++ b/w32svrapi.c @@ -1,7 +1,6 @@ -const char w32_svrapi_rcs[] = "$Id$"; /********************************************************************* * - * File : $Source$ + * File : $Source: /cvsroot/ijbswa/current/w32svrapi.c,v $ * * Purpose : Win32 Services API for Privoxy. * Provides the implementation of an Win32 service to @@ -16,8 +15,8 @@ const char w32_svrapi_rcs[] = "$Id$"; * a little more complexity to the code, but it is worth * doing to provide that isolation. * - * Copyright : Written by and Copyright (C) 2003 members of - * the Privoxy team. http://www.privoxy.org/ + * Copyright : Written by and Copyright (C) 2003, 2006 members of + * the Privoxy team. https://www.privoxy.org/ * * Written by and Copyright (C) 2003 Ian Cummings * @@ -26,7 +25,7 @@ const char w32_svrapi_rcs[] = "$Id$"; * some very helpful feedback and suggestions during the * development of this code. * - * This program is free software; you can redistribute it + * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software * Foundation; either version 2 of the License, or (at @@ -44,12 +43,8 @@ const char w32_svrapi_rcs[] = "$Id$"; * or write to the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * Revisions : - * $Log$ - * - * *********************************************************************/ - + #include "config.h" @@ -68,8 +63,6 @@ const char w32_svrapi_rcs[] = "$Id$"; #endif /* ndef _WIN_CONSOLE */ #include "w32svrapi.h" -const char w32_svrapi_h_rcs[] = W32_SVRAPI_H_VERSION; - /* Only the ANSI Win32 APIs are used at this time. If for some * reason, we're building under unicode then we must stop @@ -123,7 +116,7 @@ static BOOL HasServiceControlManager() return FALSE; } - /* Try and connect to the SCM. If it fails check and see if the error + /* Try and connect to the SCM. If it fails check and see if the error * code is ERROR_CALL_NOT_IMPLEMENTED, which means: * "This function is not supported on this system." */ @@ -169,12 +162,12 @@ BOOL CanSystemSupportServices() * The Service functions are defined in which is where * the declarations used in this file are taken from * - *********************************************************************/ + *********************************************************************/ /********************************************************************* * Open a connection to the service control manager - *********************************************************************/ + *********************************************************************/ SC_HANDLE w32_open_sc_manager( LPCTSTR lpMachineName, /* computer name */ LPCTSTR lpDatabaseName, /* SCM database name */ @@ -209,7 +202,7 @@ SC_HANDLE w32_open_sc_manager( */ FreeLibrary(hDll); SetLastError(dwLastErr); - + return hScm; } /* -END- w32_open_sc_manager */ @@ -257,7 +250,7 @@ BOOL w32_close_service_handle( /********************************************************************* * Open a service - *********************************************************************/ + *********************************************************************/ SC_HANDLE w32_open_service( SC_HANDLE hSCManager, /* handle to SCM database */ LPCTSTR lpServiceName, /* service name */ @@ -292,7 +285,7 @@ SC_HANDLE w32_open_service( */ FreeLibrary(hDll); SetLastError(dwLastErr); - + return hSrv; } /* -END- w32_open_service */ @@ -355,7 +348,7 @@ SC_HANDLE w32_create_service( */ FreeLibrary(hDll); SetLastError(dwLastErr); - + return hSrv; } /* -END- w32_create_service */ @@ -488,13 +481,13 @@ SERVICE_STATUS_HANDLE w32_register_service_ctrl_handler( HMODULE hDll = NULL; FARPROC pFunc = NULL; DWORD dwLastErr = 0; - BOOL bRet; + SERVICE_STATUS_HANDLE hServStat = (SERVICE_STATUS_HANDLE)0; /* Load the DLL with the SCM functions or return a failure status */ hDll = LoadLibrary("Advapi32.dll"); if (hDll == NULL) { - return FALSE; + return hServStat; } /* Get the address of the RegisterServiceCtrlHandler function, or return a failure status */ @@ -502,11 +495,11 @@ SERVICE_STATUS_HANDLE w32_register_service_ctrl_handler( if (pFunc == NULL) { FreeLibrary(hDll); - return FALSE; + return hServStat; } /* Close the handle, and save the error code */ - bRet = (BOOL)(*pFunc)(lpServiceName, lpHandlerProc); + hServStat = (SERVICE_STATUS_HANDLE)(*pFunc)(lpServiceName, lpHandlerProc); dwLastErr = GetLastError(); /* Release the library and then restore the last error @@ -515,7 +508,7 @@ SERVICE_STATUS_HANDLE w32_register_service_ctrl_handler( FreeLibrary(hDll); SetLastError(dwLastErr); - return bRet; + return hServStat; } /* -END- w32_register_service_ctrl_handler */ @@ -567,12 +560,12 @@ static void display_win32_msg(BOOL bIsError, char *msg) #else if (bIsError) { - MessageBox(NULL, msg, "Privoxy Error", + MessageBox(NULL, msg, "Privoxy Error", MB_OK | MB_ICONERROR | MB_TASKMODAL | MB_SETFOREGROUND | MB_TOPMOST); } else { - MessageBox(NULL, msg, "Privoxy Information", + MessageBox(NULL, msg, "Privoxy Information", MB_OK | MB_ICONINFORMATION | MB_TASKMODAL | MB_SETFOREGROUND | MB_TOPMOST); } #endif @@ -632,9 +625,9 @@ BOOL install_service(const char *service_name) * We'll temporarily use szDisplayName as a second buffer. *********************************************************************/ GetModuleFileName(NULL, szDisplayName, MAX_PATH); - sprintf(szModule, "\"%s\" --service", szDisplayName); + sprintf(szModule, "\"%s\" --service", szDisplayName); + - /********************************************************************* * Get the display name for the service *********************************************************************/ @@ -644,7 +637,7 @@ BOOL install_service(const char *service_name) /********************************************************************* * Create the service *********************************************************************/ - hService = w32_create_service(hSCM, + hService = w32_create_service(hSCM, service_name, /* the internal service name */ szDisplayName, /* the display name */ SERVICE_ALL_ACCESS, /* get full access during creation */ @@ -767,7 +760,7 @@ static void WINAPI privoxy_w32_service_start(DWORD dw, LPSTR* pszArgs) { int child_id; - /* Arg zero is always the service name, and we need to + /* Arg zero is always the service name, and we need to * know it when we call RegisterServiceCtrlHandler. */ strcpy(szThisServiceName, pszArgs[0]); @@ -789,6 +782,9 @@ static void WINAPI privoxy_w32_service_start(DWORD dw, LPSTR* pszArgs) w32_set_service_status(hSrv_status, &srv_status); #ifndef FEATURE_PTHREAD + /* NOTE: a cygwin cross-compiler build for --host=i686-w64-mingw32 must disable POSIX threading - eg + * ./configure --host=i686-w64-mingw32 --disable-pthread + */ child_id = _beginthread(w32_service_listen_loop, 0, NULL); if (child_id > 0) #else @@ -919,7 +915,7 @@ static void WINAPI privoxy_w32_service_handler(DWORD dwOpcode) * even after the process had disappeared. * * It seems that if we call exit in the ServiceMain thread, it causes - * the SCM to not recieve the status we sent in the line above. The + * the SCM to not receive the status we sent in the line above. The * simple fix was to create a new thread to actually call exit for us * whilst this thread continues and returns to its caller. */