https://git.reactos.org/?p=reactos.git;a=commitdiff;h=91b50f9ccb530e9544a224...
commit 91b50f9ccb530e9544a224df0f0a3e5630441ab6 Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sun Feb 25 18:53:05 2018 +0100 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Mon Feb 26 00:36:57 2018 +0100
[ADVAPI32] Take into account the service handler context when dispatching a control notification to a service. (Used e.g. by tcpsvcs.) --- dll/win32/advapi32/service/scm.c | 2 +- dll/win32/advapi32/service/sctrl.c | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/dll/win32/advapi32/service/scm.c b/dll/win32/advapi32/service/scm.c index ec1b84cb20..5a20508f69 100644 --- a/dll/win32/advapi32/service/scm.c +++ b/dll/win32/advapi32/service/scm.c @@ -10,7 +10,7 @@ /* INCLUDES ******************************************************************/
#include <advapi32.h> -WINE_DEFAULT_DEBUG_CHANNEL(advapi); +WINE_DEFAULT_DEBUG_CHANNEL(advapi_service);
/* FUNCTIONS *****************************************************************/ diff --git a/dll/win32/advapi32/service/sctrl.c b/dll/win32/advapi32/service/sctrl.c index fe2469732f..5afa8dfc14 100644 --- a/dll/win32/advapi32/service/sctrl.c +++ b/dll/win32/advapi32/service/sctrl.c @@ -12,7 +12,7 @@ /* INCLUDES ******************************************************************/
#include <advapi32.h> -WINE_DEFAULT_DEBUG_CHANNEL(advapi); +WINE_DEFAULT_DEBUG_CHANNEL(advapi_service);
/* TYPES *********************************************************************/ @@ -514,26 +514,31 @@ static DWORD ScControlService(PACTIVE_SERVICE lpService, PSCM_CONTROL_PACKET ControlPacket) { + DWORD dwError; + if (lpService == NULL || ControlPacket == NULL) return ERROR_INVALID_PARAMETER;
- TRACE("ScControlService() called\n"); - TRACE("Size: %lu\n", ControlPacket->dwSize); - TRACE("Service: %S\n", (PWSTR)((PBYTE)ControlPacket + ControlPacket->dwServiceNameOffset)); + TRACE("ScControlService(Size: %lu, Service: '%S') called\n", + ControlPacket->dwSize, + (PWSTR)((ULONG_PTR)ControlPacket + ControlPacket->dwServiceNameOffset));
if (lpService->HandlerFunction) { (lpService->HandlerFunction)(ControlPacket->dwControl); + dwError = ERROR_SUCCESS; } else if (lpService->HandlerFunctionEx) { - /* FIXME: send correct params */ - (lpService->HandlerFunctionEx)(ControlPacket->dwControl, 0, NULL, NULL); + /* FIXME: Send correct 2nd and 3rd parameters */ + dwError = (lpService->HandlerFunctionEx)(ControlPacket->dwControl, + 0, NULL, + lpService->HandlerContext); }
- TRACE("ScControlService() done\n"); + TRACE("ScControlService() done (error %lu)\n", dwError);
- return ERROR_SUCCESS; + return dwError; }