-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
* 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
* <ian_a_c@hotmail.com>
* 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
* or write to the Free Software Foundation, Inc., 59
* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Revisions :
- * $Log$
- *
- *
*********************************************************************/
-\f
+
#include "config.h"
#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
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."
*/
* The Service functions are defined in <winsvc.h> 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 */
*/
FreeLibrary(hDll);
SetLastError(dwLastErr);
-
+
return hScm;
} /* -END- w32_open_sc_manager */
/*********************************************************************
* Open a service
- *********************************************************************/
+ *********************************************************************/
SC_HANDLE w32_open_service(
SC_HANDLE hSCManager, /* handle to SCM database */
LPCTSTR lpServiceName, /* service name */
*/
FreeLibrary(hDll);
SetLastError(dwLastErr);
-
+
return hSrv;
} /* -END- w32_open_service */
*/
FreeLibrary(hDll);
SetLastError(dwLastErr);
-
+
return hSrv;
} /* -END- w32_create_service */
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 */
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
FreeLibrary(hDll);
SetLastError(dwLastErr);
- return bRet;
+ return hServStat;
} /* -END- w32_register_service_ctrl_handler */
#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
* 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
*********************************************************************/
/*********************************************************************
* 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 */
{
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]);
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
* 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.
*/