|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 5/5] Replace RegisterEventSource with TraceLoggingRegister
- Added TraceLogging levels for Information and Error events.
- Replaced RegisterEventSource due to potential security issues.
Signed-off-by: david ambu <david.preetham@xxxxxxxxx>
* defined seperate macros for Info and Error logging
* use a switch on log level, rather than if/else
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/monitor/monitor.c | 290 ++++++++++++++++++++++--------------------
1 file changed, 150 insertions(+), 140 deletions(-)
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 77d7dd8..a9b69f3 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -40,6 +40,8 @@
#include <powrprof.h>
#include <malloc.h>
#include <assert.h>
+#include <TraceLoggingProvider.h>
+#include <winmeta.h>
#include <version.h>
@@ -56,7 +58,6 @@ typedef struct _MONITOR_CONTEXT {
SERVICE_STATUS Status;
SERVICE_STATUS_HANDLE Service;
HKEY ParametersKey;
- HANDLE EventLog;
HANDLE StopEvent;
HANDLE RequestEvent;
HANDLE Timer;
@@ -96,17 +97,25 @@ MONITOR_CONTEXT MonitorContext;
#define STORAGE_CLASS_GUID \
"{4d36e97b-e325-11ce-bfc1-08002be10318}"
+TRACELOGGING_DEFINE_PROVIDER(g_xenbus_monitor,
+ MONITOR_NAME,
+ //{E8ADEEB7-6DD1-447E-A49B-A6571CC74039}
+ (0xe8adeeb7, 0x6dd1, 0x447e, 0xa4, 0x9b, 0xa6,
0x57, 0x1c, 0xc7, 0x40, 0x39)
+ );
+
+typedef enum {
+ LOG_INFO,
+ LOG_ERROR
+} LOG_LEVEL;
+
static VOID
#pragma prefast(suppress:6262) // Function uses '1036' bytes of stack: exceeds
/analyze:stacksize'1024'
__Log(
+ _In_ LOG_LEVEL Level,
_In_ PCSTR Format,
...
)
{
-#if DBG
- PMONITOR_CONTEXT Context = &MonitorContext;
- const TCHAR *Strings[1];
-#endif
TCHAR Buffer[MAXIMUM_BUFFER_SIZE];
va_list Arguments;
size_t Length;
@@ -133,24 +142,31 @@ __Log(
OutputDebugString(Buffer);
-#if DBG
- Strings[0] = Buffer;
-
- if (Context->EventLog != NULL)
- ReportEvent(Context->EventLog,
- EVENTLOG_INFORMATION_TYPE,
- 0,
- MONITOR_LOG,
- NULL,
- ARRAYSIZE(Strings),
- 0,
- Strings,
- NULL);
-#endif
+ switch (Level) {
+ case LOG_INFO:
+ TraceLoggingWrite(g_xenbus_monitor,
+ "Information",
+ TraceLoggingLevel(WINEVENT_LEVEL_INFO),
+ TraceLoggingString(Buffer, "Info")
+ );
+ break;
+ case LOG_ERROR:
+ TraceLoggingWrite(g_xenbus_monitor,
+ "Error",
+ TraceLoggingLevel(WINEVENT_LEVEL_ERROR),
+ TraceLoggingString(Buffer, "Error")
+ );
+ break;
+ default:
+ break;
+ }
}
-#define Log(_Format, ...) \
- __Log(__MODULE__ "|" __FUNCTION__ ": " _Format, __VA_ARGS__)
+#define LogInfo(_Format, ...) \
+ __Log(LOG_INFO, __MODULE__ "|" __FUNCTION__ ": " _Format, __VA_ARGS__)
+
+#define LogError(_Format, ...) \
+ __Log(LOG_ERROR, __MODULE__ "|" __FUNCTION__ ": " _Format, __VA_ARGS__)
static PTSTR
GetErrorMessage(
@@ -215,7 +231,7 @@ ReportStatus(
BOOL Success;
HRESULT Error;
- Log("====> (%s)", ServiceStateName(CurrentState));
+ LogInfo("====> (%s)", ServiceStateName(CurrentState));
Context->Status.dwCurrentState = CurrentState;
Context->Status.dwWin32ExitCode = Win32ExitCode;
@@ -239,7 +255,7 @@ ReportStatus(
if (!Success)
goto fail1;
- Log("<====");
+ LogInfo("<====");
return;
@@ -249,7 +265,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
}
@@ -326,11 +342,11 @@ DoReboot(
_In_ DWORD Timeout
)
{
- Log("waiting for pending install events...");
+ LogInfo("waiting for pending install events...");
(VOID) CM_WaitNoPendingInstallEvents(INFINITE);
- Log("initiating shutdown...");
+ LogInfo("initiating shutdown...");
#pragma prefast(suppress:28159)
(VOID) InitiateSystemShutdownEx(NULL,
@@ -366,7 +382,7 @@ GetPromptTimeout(
Type != REG_DWORD)
Value = 0;
- Log("%u", Value);
+ LogInfo("%u", Value);
return Value;
}
@@ -445,18 +461,18 @@ GetDisplayName(
return DisplayName;
fail5:
- Log("fail5");
+ LogError("fail5");
fail4:
- Log("fail4");
+ LogError("fail4");
free(DisplayName);
fail3:
- Log("fail3");
+ LogError("fail3");
fail2:
- Log("fail2");
+ LogError("fail2");
RegCloseKey(ServiceKey);
@@ -466,7 +482,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -531,7 +547,7 @@ DoPromptForReboot(
WTS_CONNECTSTATE_CLASS State = SessionInfo[Index].State;
DWORD Response;
- Log("[%u]: %s [%s]",
+ LogInfo("[%u]: %s [%s]",
SessionId,
Name,
WTSStateName(State));
@@ -565,7 +581,7 @@ DoPromptForReboot(
return ERROR_SUCCESS;
fail2:
- Log("fail2");
+ LogError("fail2");
*Prompt->PResponse = 0;
fail1:
@@ -598,7 +614,7 @@ PromptForReboot(
return;
Context->RebootPrompted = TRUE;
- Log("====> (%s)", DriverName);
+ LogInfo("====> (%s)", DriverName);
Prompt = calloc(1, sizeof (REBOOT_PROMPT));
if (Prompt == NULL) {
@@ -665,20 +681,20 @@ PromptForReboot(
return;
fail4:
- Log("fail4");
+ LogError("fail4");
free(DisplayName);
fail3:
- Log("fail3");
+ LogError("fail3");
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -772,7 +788,7 @@ TryAutoReboot(
if (RebootCount >= AutoReboot)
goto prompt;
- Log("AutoRebooting (reboot %u of %u)\n",
+ LogInfo("AutoRebooting (reboot %u of %u)\n",
RebootCount,
AutoReboot);
@@ -844,18 +860,18 @@ done:
return;
fail3:
- Log("fail3");
+ LogError("fail3");
free(DisplayName);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -878,7 +894,7 @@ RegEnumSubKeys(
DWORD Index;
HRESULT Error;
- Log("====>");
+ LogInfo("====>");
Error = RegQueryInfoKey(BaseKey,
NULL,
@@ -920,7 +936,7 @@ RegEnumSubKeys(
goto fail3;
}
- Log("%s", SubKeyName);
+ LogInfo("%s", SubKeyName);
if (!Callback(BaseKey, SubKeyName, Context))
break;
@@ -931,12 +947,12 @@ RegEnumSubKeys(
return ERROR_SUCCESS;
fail3:
- Log("fail3");
+ LogError("fail3");
free(SubKeyName);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
Error = GetLastError();
@@ -944,7 +960,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1008,7 +1024,7 @@ CheckRequestSubKeys(
BOOLEAN Found;
HRESULT Error;
- Log("====>");
+ LogInfo("====>");
Found = FALSE;
@@ -1025,7 +1041,7 @@ CheckRequestSubKeys(
(VOID) RegFlushKey(Context->ParametersKey);
}
- Log("<====");
+ LogInfo("<====");
return;
@@ -1035,7 +1051,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
}
@@ -1048,7 +1064,7 @@ CheckRequestKey(
PMONITOR_CONTEXT Context = &MonitorContext;
HRESULT Error;
- Log("====>");
+ LogInfo("====>");
CheckRequestSubKeys();
@@ -1061,7 +1077,7 @@ CheckRequestKey(
if (Error != ERROR_SUCCESS)
goto fail1;
- Log("<====");
+ LogInfo("<====");
return;
@@ -1071,7 +1087,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
}
@@ -1086,7 +1102,7 @@ AcquireShutdownPrivilege(
BOOL Success;
HRESULT Error;
- Log("====>");
+ LogInfo("====>");
New.PrivilegeCount = 1;
@@ -1118,17 +1134,17 @@ AcquireShutdownPrivilege(
CloseHandle(Token);
- Log("<====");
+ LogInfo("<====");
return TRUE;
fail3:
- Log("fail3");
+ LogError("fail3");
CloseHandle(Token);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
Error = GetLastError();
@@ -1136,7 +1152,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1194,20 +1210,20 @@ GetRequestKeyName(
goto fail4;
}
- Log("%s", *RequestKeyName);
+ LogInfo("%s", *RequestKeyName);
return TRUE;
fail4:
- Log("fail4");
+ LogError("fail4");
fail3:
- Log("fail3");
+ LogError("fail3");
free(*RequestKeyName);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
Error = GetLastError();
@@ -1215,7 +1231,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1321,37 +1337,37 @@ GetDialogParameters(
return TRUE;
fail10:
- Log("fail10");
+ LogError("fail10");
fail9:
- Log("fail9");
+ LogError("fail9");
free(Context->Question);
fail8:
- Log("fail8");
+ LogError("fail8");
fail7:
- Log("fail7");
+ LogError("fail7");
fail6:
- Log("fail6");
+ LogError("fail6");
free(Context->Text);
fail5:
- Log("fail5");
+ LogError("fail5");
fail4:
- Log("fail4");
+ LogError("fail4");
fail3:
- Log("fail3");
+ LogError("fail3");
free(Context->Title);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
Error = GetLastError();
@@ -1359,7 +1375,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1392,7 +1408,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1494,24 +1510,24 @@ done:
return TRUE;
fail6:
- Log("fail6");
+ LogError("fail6");
fail5:
- Log("fail5");
+ LogError("fail5");
fail4:
- Log("fail4");
+ LogError("fail4");
fail3:
- Log("fail3");
+ LogError("fail3");
free(Value);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
- Log("fail1");
+ LogError("fail1");
return TRUE;
}
@@ -1574,10 +1590,10 @@ RemoveAllStartOverrides(
return TRUE;
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
- Log("fail1");
+ LogError("fail1");
return FALSE;
}
@@ -1597,7 +1613,10 @@ MonitorMain(
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
- Log("====>");
+ if (TraceLoggingRegister(g_xenbus_monitor) != ERROR_SUCCESS)
+ LogInfo("TraceLoggingRegister failed");
+
+ LogInfo("====>");
(VOID) RemoveStartOverride("stornvme");
(VOID) RemoveAllStartOverrides();
@@ -1620,11 +1639,6 @@ MonitorMain(
if (Context->Service == NULL)
goto fail3;
- Context->EventLog = RegisterEventSource(NULL,
- MONITOR_NAME);
- if (Context->EventLog == NULL)
- goto fail4;
-
Context->Status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
Context->Status.dwServiceSpecificExitCode = 0;
@@ -1636,26 +1650,26 @@ MonitorMain(
NULL);
if (Context->StopEvent == NULL)
- goto fail5;
+ goto fail4;
Context->RequestEvent = CreateEvent(NULL,
TRUE,
FALSE,
NULL);
if (Context->RequestEvent == NULL)
- goto fail6;
+ goto fail5;
Context->ResponseEvent = CreateEvent(NULL,
FALSE,
FALSE,
NULL);
if (Context->ResponseEvent == NULL)
- goto fail7;
+ goto fail6;
Context->Response = 0;
Success = GetRequestKeyName(&RequestKeyName);
if (!Success)
- goto fail8;
+ goto fail7;
Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
RequestKeyName,
@@ -1667,15 +1681,15 @@ MonitorMain(
&Context->RequestKey,
NULL);
if (Error != ERROR_SUCCESS)
- goto fail9;
+ goto fail8;
Success = GetDialogParameters();
if (!Success)
- goto fail10;
+ goto fail9;
Context->Timer = CreateWaitableTimer(NULL, FALSE, NULL);
if (Context->Timer == NULL)
- goto fail11;
+ goto fail10;
DueTime.QuadPart = -10000LL * REBOOT_RETRY_DELAY;
@@ -1686,7 +1700,7 @@ MonitorMain(
NULL,
FALSE);
if (!Success)
- goto fail12;
+ goto fail11;
SetEvent(Context->RequestEvent);
@@ -1701,12 +1715,12 @@ MonitorMain(
Events[2] = Context->ResponseEvent;
Events[3] = Context->Timer;
- Log("waiting (%u)...", ARRAYSIZE(Events));
+ LogInfo("waiting (%u)...", ARRAYSIZE(Events));
Object = WaitForMultipleObjects(ARRAYSIZE(Events),
Events,
FALSE,
INFINITE);
- Log("awake");
+ LogInfo("awake");
switch (Object) {
case WAIT_OBJECT_0:
@@ -1752,65 +1766,59 @@ done:
ReportStatus(SERVICE_STOPPED, NO_ERROR, 0);
- (VOID) DeregisterEventSource(Context->EventLog);
-
RegCloseKey(Context->ParametersKey);
(VOID) RemoveStartOverride("stornvme");
(VOID) RemoveAllStartOverrides();
- Log("<====");
+ LogInfo("<====");
+ TraceLoggingUnregister(g_xenbus_monitor);
return;
-fail12:
- Log("fail12");
+fail11:
+ LogError("fail11");
CloseHandle(Context->Timer);
-fail11:
- Log("fail11");
-
fail10:
- Log("fail10");
-
- RegCloseKey(Context->RequestKey);
+ LogError("fail10");
fail9:
- Log("fail9");
+ LogError("fail9");
- free(RequestKeyName);
+ RegCloseKey(Context->RequestKey);
fail8:
- Log("fail8");
+ LogError("fail8");
- CloseHandle(Context->ResponseEvent);
+ free(RequestKeyName);
fail7:
- Log("fail7");
+ LogError("fail7");
- CloseHandle(Context->RequestEvent);
+ CloseHandle(Context->ResponseEvent);
fail6:
- Log("fail6");
+ LogError("fail6");
- CloseHandle(Context->StopEvent);
+ CloseHandle(Context->RequestEvent);
fail5:
- Log("fail5");
+ LogError("fail5");
- ReportStatus(SERVICE_STOPPED, GetLastError(), 0);
-
- (VOID) DeregisterEventSource(Context->EventLog);
+ CloseHandle(Context->StopEvent);
fail4:
- Log("fail4");
+ LogError("fail4");
+
+ ReportStatus(SERVICE_STOPPED, GetLastError(), 0);
fail3:
- Log("fail3");
+ LogError("fail3");
fail2:
- Log("fail2");
+ LogError("fail2");
RegCloseKey(Context->ParametersKey);
@@ -1820,9 +1828,11 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
+
+ TraceLoggingUnregister(g_xenbus_monitor);
}
static BOOL
@@ -1835,7 +1845,7 @@ MonitorCreate(
TCHAR Path[MAX_PATH];
HRESULT Error;
- Log("====>");
+ LogInfo("====>");
if(!GetModuleFileName(NULL, Path, MAX_PATH))
goto fail1;
@@ -1867,17 +1877,17 @@ MonitorCreate(
CloseServiceHandle(Service);
CloseServiceHandle(SCManager);
- Log("<====");
+ LogInfo("<====");
return TRUE;
fail3:
- Log("fail3");
+ LogError("fail3");
CloseServiceHandle(SCManager);
fail2:
- Log("fail2");
+ LogError("fail2");
fail1:
Error = GetLastError();
@@ -1885,7 +1895,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1903,7 +1913,7 @@ MonitorDelete(
SERVICE_STATUS Status;
HRESULT Error;
- Log("====>");
+ LogInfo("====>");
SCManager = OpenSCManager(NULL,
NULL,
@@ -1934,20 +1944,20 @@ MonitorDelete(
CloseServiceHandle(Service);
CloseServiceHandle(SCManager);
- Log("<====");
+ LogInfo("<====");
return TRUE;
fail4:
- Log("fail4");
+ LogError("fail4");
fail3:
- Log("fail3");
+ LogError("fail3");
CloseServiceHandle(Service);
fail2:
- Log("fail2");
+ LogError("fail2");
CloseServiceHandle(SCManager);
@@ -1957,7 +1967,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1975,14 +1985,14 @@ MonitorEntry(
};
HRESULT Error;
- Log("%s (%s) ====>",
+ LogInfo("%s (%s) ====>",
MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "."
BUILD_NUMBER_STR,
DAY_STR "/" MONTH_STR "/" YEAR_STR);
if (!StartServiceCtrlDispatcher(Table))
goto fail1;
- Log("%s (%s) <====",
+ LogInfo("%s (%s) <====",
MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "."
BUILD_NUMBER_STR,
DAY_STR "/" MONTH_STR "/" YEAR_STR);
@@ -1994,7 +2004,7 @@ fail1:
{
PTSTR Message;
Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
+ LogError("fail1 (%s)", Message);
LocalFree(Message);
}
--
2.51.2.windows.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |