+VOID
+SaveProtocol(VOID)
+{
+ HANDLE hEventLog;
+ WCHAR szFileName[MAX_PATH];
+
+ ZeroMemory(szFileName, sizeof(szFileName));
+
+ sfn.lpstrFile = szFileName;
+ sfn.nMaxFile = MAX_PATH;
+
+ if (!GetSaveFileNameW(&sfn))
+ {
+ return;
+ }
+
+ hEventLog = OpenEventLogW(lpComputerName, lpSourceLogName);
+ if (!hEventLog)
+ {
+ ShowLastWin32Error();
+ return;
+ }
+
+ if (!BackupEventLogW(hEventLog, szFileName))
+ {
+ ShowLastWin32Error();
+ }
+
+ CloseEventLog(hEventLog);
+}
+
+
+BOOL
+ClearEvents(VOID)
+{
+ HANDLE hEventLog;
+ WCHAR szFileName[MAX_PATH];
+ WCHAR szMessage[MAX_LOADSTRING];
+
+ ZeroMemory(szFileName, sizeof(szFileName));
+ ZeroMemory(szMessage, sizeof(szMessage));
+
+ LoadStringW(hInst, IDS_CLEAREVENTS_MSG, szMessage, MAX_LOADSTRING);
+
+ sfn.lpstrFile = szFileName;
+ sfn.nMaxFile = MAX_PATH;
+
+ switch (MessageBoxW(hwndMainWindow, szMessage, szTitle, MB_YESNOCANCEL | MB_ICONINFORMATION))
+ {
+ case IDCANCEL:
+ {
+ return FALSE;
+ break;
+ }
+
+ case IDNO:
+ {
+ sfn.lpstrFile = NULL;
+ break;
+ }
+
+ case IDYES:
+ {
+ if (!GetSaveFileNameW(&sfn))
+ {
+ return FALSE;
+ }
+ break;
+ }
+ }
+
+ hEventLog = OpenEventLogW(lpComputerName, lpSourceLogName);
+ if (!hEventLog)
+ {
+ ShowLastWin32Error();
+ return FALSE;
+ }
+
+ if (!ClearEventLogW(hEventLog, sfn.lpstrFile))
+ {
+ ShowLastWin32Error();
+ CloseEventLog(hEventLog);
+ return FALSE;
+ }
+
+ CloseEventLog(hEventLog);
+
+ return TRUE;
+}
+
+