From fc001348ab628756bfef3e7c54979e1ae283dfad Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 25 Sep 2011 12:07:52 +0000 Subject: [PATCH] [SERVICES] - Silence debug messages. - Fix typos. - Add missing database locks. - RControlService: Return ERROR_INVALID_PARAMETER on illegal control code. svn path=/trunk/; revision=53850 --- reactos/base/system/services/database.c | 24 +++++++++++++----------- reactos/base/system/services/rpcserver.c | 23 +++++++++++++---------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c index 130ef54d3c6..5c49e9f7e49 100644 --- a/reactos/base/system/services/database.c +++ b/reactos/base/system/services/database.c @@ -146,7 +146,7 @@ ScmGetServiceImageByImagePath(LPWSTR lpImagePath) ImageEntry = ImageEntry->Flink; } - DPRINT1("Couldn't find a matching image\n"); + DPRINT("Couldn't find a matching image\n"); return NULL; @@ -1368,7 +1368,7 @@ ScmWaitForServiceConnect(PSERVICE Service) OVERLAPPED Overlapped = {0, 0, 0, 0, 0}; #endif - DPRINT1("ScmWaitForServiceConnect()\n"); + DPRINT("ScmWaitForServiceConnect()\n"); #ifdef USE_ASYNCHRONOUS_IO Overlapped.hEvent = (HANDLE)NULL; @@ -1377,19 +1377,21 @@ ScmWaitForServiceConnect(PSERVICE Service) &Overlapped); if (bResult == FALSE) { - DPRINT1("ConnectNamedPipe() returned FALSE\n"); + DPRINT("ConnectNamedPipe() returned FALSE\n"); dwError = GetLastError(); if (dwError == ERROR_IO_PENDING) { - DPRINT1("dwError: ERROR_IO_PENDING\n"); + DPRINT("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, dwPipeTimeout); - DPRINT1("WaitForSingleObject() returned %lu\n", dwError); + DPRINT("WaitForSingleObject() returned %lu\n", dwError); if (dwError == WAIT_TIMEOUT) { + DPRINT("WaitForSingleObject() returned WAIT_TIMEOUT\n"); + bResult = CancelIo(Service->lpImage->hControlPipe); if (bResult == FALSE) { @@ -1420,7 +1422,7 @@ ScmWaitForServiceConnect(PSERVICE Service) } } - DPRINT1("Control pipe connected!\n"); + DPRINT("Control pipe connected!\n"); Overlapped.hEvent = (HANDLE) NULL; @@ -1432,18 +1434,18 @@ ScmWaitForServiceConnect(PSERVICE Service) &Overlapped); if (bResult == FALSE) { - DPRINT1("ReadFile() returned FALSE\n"); + DPRINT("ReadFile() returned FALSE\n"); dwError = GetLastError(); if (dwError == ERROR_IO_PENDING) { - DPRINT1("dwError: ERROR_IO_PENDING\n"); + DPRINT("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, dwPipeTimeout); if (dwError == WAIT_TIMEOUT) { - DPRINT1("WaitForSingleObject() returned WAIT_TIMEOUT\n"); + DPRINT("WaitForSingleObject() returned WAIT_TIMEOUT\n"); bResult = CancelIo(Service->lpImage->hControlPipe); if (bResult == FALSE) @@ -1455,9 +1457,9 @@ ScmWaitForServiceConnect(PSERVICE Service) } else if (dwError == ERROR_SUCCESS) { - DPRINT1("WaitForSingleObject() returned ERROR_SUCCESS\n"); + DPRINT("WaitForSingleObject() returned ERROR_SUCCESS\n"); - DPRINT1("Process Id: %lu\n", dwProcessId); + DPRINT("Process Id: %lu\n", dwProcessId); bResult = GetOverlappedResult(Service->lpImage->hControlPipe, &Overlapped, diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c index 8f3c1ab78e4..2739d67c1a6 100644 --- a/reactos/base/system/services/rpcserver.c +++ b/reactos/base/system/services/rpcserver.c @@ -609,11 +609,7 @@ DWORD RControlService( if (dwControl >= 128 && dwControl <= 255) DesiredAccess = SERVICE_USER_DEFINED_CONTROL; else - DesiredAccess = SERVICE_QUERY_CONFIG | - SERVICE_CHANGE_CONFIG | - SERVICE_QUERY_STATUS | - SERVICE_START | - SERVICE_PAUSE_CONTINUE; + return ERROR_INVALID_PARAMETER; break; } @@ -862,7 +858,9 @@ DWORD RQueryServiceObjectSecurity( return ERROR_INVALID_HANDLE; } - /* FIXME: Lock the service list */ + /* Lock the service database */ + ScmLockDatabaseShared(); + /* hack */ Status = RtlCreateSecurityDescriptor(&ObjectDescriptor, SECURITY_DESCRIPTOR_REVISION); @@ -873,7 +871,8 @@ DWORD RQueryServiceObjectSecurity( cbBufSize, &dwBytesNeeded); - /* FIXME: Unlock the service list */ + /* Unlock the service database */ + ScmUnlockDatabase(); if (NT_SUCCESS(Status)) { @@ -975,9 +974,12 @@ DWORD RSetServiceObjectSecurity( return RtlNtStatusToDosError(Status); RpcRevertToSelf(); +#endif - /* FIXME: Lock service database */ + /* Lock the service database exclusive */ + ScmLockDatabaseExclusive(); +#if 0 Status = RtlSetSecurityObject(dwSecurityInformation, (PSECURITY_DESCRIPTOR)lpSecurityDescriptor, &lpService->lpSecurityDescriptor, @@ -1011,7 +1013,8 @@ Done: NtClose(hToken); #endif - /* FIXME: Unlock service database */ + /* Unlock service database */ + ScmUnlockDatabase(); DPRINT("RSetServiceObjectSecurity() done (Error %lu)\n", dwError); @@ -1053,7 +1056,7 @@ DWORD RQueryServiceStatus( return ERROR_INVALID_HANDLE; } - /* Lock the srevice database shared */ + /* Lock the service database shared */ ScmLockDatabaseShared(); /* Return service status information */