X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fbase%2Fsystem%2Fservices%2Frpcserver.c;h=08f53362b628d9fa4c8a07b9b5da3dee1ac25b00;hp=692628a29b86533f64f9eafcc6bab15177256bb9;hb=21ffbe6393bf8d6d3b579788a7f53cdc751cb31e;hpb=7c020d5ce133087315085a6ab469847047ae4aa8 diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c index 692628a29b8..08f53362b62 100644 --- a/reactos/base/system/services/rpcserver.c +++ b/reactos/base/system/services/rpcserver.c @@ -1085,6 +1085,7 @@ DWORD RControlService( DWORD dwControlsAccepted; DWORD dwCurrentState; HKEY hServicesKey = NULL; + LPCWSTR lpErrorStrings[2]; DPRINT("RControlService() called\n"); @@ -1242,6 +1243,39 @@ DWORD RControlService( sizeof(SERVICE_STATUS)); } + if (dwError == ERROR_SUCCESS) + { + if (dwControl != SERVICE_CONTROL_INTERROGATE) + { + /* Log a sucessful send control */ + lpErrorStrings[0] = lpService->lpDisplayName; + + switch(dwControl) + { + case SERVICE_CONTROL_STOP: + lpErrorStrings[1] = L"stop"; + break; + + case SERVICE_CONTROL_PAUSE: + lpErrorStrings[1] = L"pause"; + break; + + case SERVICE_CONTROL_CONTINUE: + lpErrorStrings[1] = L"continue"; + break; + + default: + lpErrorStrings[1] = L"other"; + break; + } + + ScmLogEvent(EVENT_SERVICE_CONTROL_SUCCESS, + EVENTLOG_INFORMATION_TYPE, + 2, + lpErrorStrings); + } + } + return dwError; } @@ -1691,20 +1725,47 @@ DWORD RSetServiceStatus( /* Unlock the service database */ ScmUnlockDatabase(); - /* Log a failed service stop */ if ((lpServiceStatus->dwCurrentState == SERVICE_STOPPED) && - (dwPreviousState != SERVICE_STOPPED)) + (dwPreviousState != SERVICE_STOPPED) && + (lpServiceStatus->dwWin32ExitCode != ERROR_SUCCESS)) + { + /* Log a failed service stop */ + swprintf(szErrorBuffer, L"%lu", lpServiceStatus->dwWin32ExitCode); + lpErrorStrings[0] = lpService->lpDisplayName; + lpErrorStrings[1] = szErrorBuffer; + + ScmLogEvent(EVENT_SERVICE_EXIT_FAILED, + EVENTLOG_ERROR_TYPE, + 2, + lpErrorStrings); + } + else if (lpServiceStatus->dwCurrentState != dwPreviousState && + (lpServiceStatus->dwCurrentState == SERVICE_STOPPED || + lpServiceStatus->dwCurrentState == SERVICE_RUNNING || + lpServiceStatus->dwCurrentState == SERVICE_PAUSED)) { - if (lpServiceStatus->dwWin32ExitCode != ERROR_SUCCESS) + /* Log a successful service status change */ + lpErrorStrings[0] = lpService->lpDisplayName; + + switch(lpServiceStatus->dwCurrentState) { - swprintf(szErrorBuffer, L"%lu", lpServiceStatus->dwWin32ExitCode); - lpErrorStrings[0] = lpService->lpDisplayName; - lpErrorStrings[1] = szErrorBuffer; + case SERVICE_STOPPED: + lpErrorStrings[1] = L"stopped"; + break; - ScmLogError(EVENT_SERVICE_EXIT_FAILED, - 2, - lpErrorStrings); + case SERVICE_RUNNING: + lpErrorStrings[1] = L"running"; + break; + + case SERVICE_PAUSED: + lpErrorStrings[1] = L"paused"; + break; } + + ScmLogEvent(EVENT_SERVICE_STATUS_SUCCESS, + EVENTLOG_INFORMATION_TYPE, + 2, + lpErrorStrings); } DPRINT("Set %S to %lu\n", lpService->lpDisplayName, lpService->Status.dwCurrentState);