mirror of
https://github.com/reactos/reactos.git
synced 2025-05-18 00:31:27 +00:00
[SERVICES]
Log service start, control and status change events. svn path=/trunk/; revision=64364
This commit is contained in:
parent
7c020d5ce1
commit
21ffbe6393
4 changed files with 105 additions and 19 deletions
|
@ -1456,6 +1456,19 @@ ScmWaitForServiceConnect(PSERVICE Service)
|
|||
return dwError;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dwProcessId != Service->lpImage->dwProcessId)
|
||||
{
|
||||
/*
|
||||
LPWSTR Strings[3]
|
||||
|
||||
ScmLogError(EVENT_SERVICE_DIFFERENT_PID_CONNECTED,
|
||||
3,
|
||||
lpStrings);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
DPRINT("ScmWaitForServiceConnect() done\n");
|
||||
|
||||
|
@ -1578,7 +1591,7 @@ ScmLoadService(PSERVICE Service,
|
|||
{
|
||||
PSERVICE_GROUP Group = Service->lpGroup;
|
||||
DWORD dwError = ERROR_SUCCESS;
|
||||
LPCWSTR ErrorLogStrings[2];
|
||||
LPCWSTR lpErrorStrings[2];
|
||||
WCHAR szErrorBuffer[32];
|
||||
|
||||
DPRINT("ScmLoadService() called\n");
|
||||
|
@ -1633,6 +1646,14 @@ ScmLoadService(PSERVICE Service,
|
|||
{
|
||||
Group->ServicesRunning = TRUE;
|
||||
}
|
||||
|
||||
/* Log a successful service start */
|
||||
lpErrorStrings[0] = Service->lpDisplayName;
|
||||
lpErrorStrings[1] = L"start";
|
||||
ScmLogEvent(EVENT_SERVICE_CONTROL_SUCCESS,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
2,
|
||||
lpErrorStrings);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1640,11 +1661,12 @@ ScmLoadService(PSERVICE Service,
|
|||
{
|
||||
/* Log a failed service start */
|
||||
swprintf(szErrorBuffer, L"%lu", dwError);
|
||||
ErrorLogStrings[0] = Service->lpServiceName;
|
||||
ErrorLogStrings[1] = szErrorBuffer;
|
||||
ScmLogError(EVENT_SERVICE_START_FAILED,
|
||||
lpErrorStrings[0] = Service->lpServiceName;
|
||||
lpErrorStrings[1] = szErrorBuffer;
|
||||
ScmLogEvent(EVENT_SERVICE_START_FAILED,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
2,
|
||||
ErrorLogStrings);
|
||||
lpErrorStrings);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
if (lpServiceStatus->dwWin32ExitCode != ERROR_SUCCESS)
|
||||
{
|
||||
swprintf(szErrorBuffer, L"%lu", lpServiceStatus->dwWin32ExitCode);
|
||||
lpErrorStrings[0] = lpService->lpDisplayName;
|
||||
lpErrorStrings[1] = szErrorBuffer;
|
||||
/* Log a failed service stop */
|
||||
swprintf(szErrorBuffer, L"%lu", lpServiceStatus->dwWin32ExitCode);
|
||||
lpErrorStrings[0] = lpService->lpDisplayName;
|
||||
lpErrorStrings[1] = szErrorBuffer;
|
||||
|
||||
ScmLogError(EVENT_SERVICE_EXIT_FAILED,
|
||||
2,
|
||||
lpErrorStrings);
|
||||
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))
|
||||
{
|
||||
/* Log a successful service status change */
|
||||
lpErrorStrings[0] = lpService->lpDisplayName;
|
||||
|
||||
switch(lpServiceStatus->dwCurrentState)
|
||||
{
|
||||
case SERVICE_STOPPED:
|
||||
lpErrorStrings[1] = L"stopped";
|
||||
break;
|
||||
|
||||
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);
|
||||
|
|
|
@ -53,7 +53,8 @@ PrintString(LPCSTR fmt, ...)
|
|||
|
||||
|
||||
VOID
|
||||
ScmLogError(DWORD dwEventId,
|
||||
ScmLogEvent(DWORD dwEventId,
|
||||
WORD wType,
|
||||
WORD wStrings,
|
||||
LPCWSTR *lpStrings)
|
||||
{
|
||||
|
@ -68,10 +69,10 @@ ScmLogError(DWORD dwEventId,
|
|||
}
|
||||
|
||||
if (!ReportEventW(hLog,
|
||||
EVENTLOG_ERROR_TYPE,
|
||||
wType,
|
||||
0,
|
||||
dwEventId,
|
||||
NULL, // Sid,
|
||||
NULL,
|
||||
wStrings,
|
||||
0,
|
||||
lpStrings,
|
||||
|
|
|
@ -175,6 +175,7 @@ DWORD ScmSetServiceGroup(PSERVICE lpService,
|
|||
|
||||
|
||||
/* lock.c */
|
||||
|
||||
DWORD ScmAcquireServiceStartLock(IN BOOL IsServiceController,
|
||||
OUT LPSC_RPC_LOCK lpLock);
|
||||
DWORD ScmReleaseServiceStartLock(IN OUT LPSC_RPC_LOCK lpLock);
|
||||
|
@ -190,7 +191,8 @@ VOID ScmStartRpcServer(VOID);
|
|||
/* services.c */
|
||||
|
||||
VOID PrintString(LPCSTR fmt, ...);
|
||||
VOID ScmLogError(DWORD dwEventId,
|
||||
VOID ScmLogEvent(DWORD dwEventId,
|
||||
WORD wType,
|
||||
WORD wStrings,
|
||||
LPCWSTR *lpStrings);
|
||||
VOID ScmWaitForLsa(VOID);
|
||||
|
|
Loading…
Reference in a new issue