Author: akhaldi
Date: Sat Feb 19 21:24:47 2011
New Revision: 50822
URL:
http://svn.reactos.org/svn/reactos?rev=50822&view=rev
Log:
[EVENTVWR]
- Fix handling of NULL lpComputerName.
- Handle lpData conversion to a wide string and make sure it's NULL terminated.
- Patch by Rafal Harabien, <rafalh1992 AT o2 DOT pl>
See issue #5926 for more details.
Modified:
trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c
Modified: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
==============================================================================
--- trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c [iso-8859-1] Sat Feb 19
21:24:47 2011
@@ -503,11 +503,12 @@
HWND hwndDlg;
HANDLE hEventLog;
EVENTLOGRECORD *pevlr;
- DWORD dwRead, dwNeeded, dwThisRecord, dwTotalRecords = 0, dwCurrentRecord = 1,
dwRecordsToRead = 0, dwFlags;
+ DWORD dwRead, dwNeeded, dwThisRecord, dwTotalRecords = 0, dwCurrentRecord = 1,
dwRecordsToRead = 0, dwFlags, dwMaxLength;
LPWSTR lpSourceName;
LPWSTR lpComputerName;
- LPWSTR lpData;
+ LPSTR lpData;
BOOL bResult = TRUE; /* Read succeeded. */
+ int i;
WCHAR szWindowTitle[MAX_PATH];
WCHAR szStatusText[MAX_PATH];
@@ -519,6 +520,7 @@
WCHAR szUsername[MAX_PATH];
WCHAR szEventText[EVENT_MESSAGE_FILE_BUFFER];
WCHAR szCategory[MAX_PATH];
+ WCHAR szData[MAX_PATH];
SYSTEMTIME time;
LVITEMW lviEventItem;
@@ -606,7 +608,7 @@
lpComputerName = (LPWSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD) +
(wcslen(lpSourceName) + 1) * sizeof(WCHAR));
// This ist the data section of the current event
- lpData = (LPWSTR)((LPBYTE)pevlr + pevlr->DataOffset);
+ lpData = (LPSTR)((LPBYTE)pevlr + pevlr->DataOffset);
// Compute the event type
EventTimeToSystemTime(pevlr->TimeWritten, &time);
@@ -665,7 +667,13 @@
ListView_SetItemText(hwndListView, lviEventItem.iItem, 5, szEventID);
ListView_SetItemText(hwndListView, lviEventItem.iItem, 6, szUsername);
//User
ListView_SetItemText(hwndListView, lviEventItem.iItem, 7, lpComputerName);
//Computer
- ListView_SetItemText(hwndListView, lviEventItem.iItem, 8, lpData); //Event
Text
+ MultiByteToWideChar(CP_ACP,
+ 0,
+ lpData,
+ pevlr->DataLength,
+ szData,
+ MAX_PATH);
+ ListView_SetItemText(hwndListView, lviEventItem.iItem, 8, szData); //Event
Text
dwRead -= pevlr->Length;
pevlr = (EVENTLOGRECORD *)((LPBYTE) pevlr + pevlr->Length);
@@ -678,7 +686,15 @@
// All events loaded
EndDialog(hwndDlg, 0);
- swprintf(szWindowTitle, L"%s - %s Log on \\\\%s", szTitle, lpLogName,
lpComputerName);
+
+ i = swprintf(szWindowTitle, L"%s - %s Log on \\\\", szTitle, lpLogName); /*
i = number of characters written */
+ /* lpComputerName can be NULL here if no records was read */
+ dwMaxLength = sizeof(szWindowTitle)/sizeof(WCHAR)-i;
+ if(!lpComputerName)
+ GetComputerNameW(szWindowTitle+i, &dwMaxLength);
+ else
+ _snwprintf(szWindowTitle+i, dwMaxLength, L"%s", lpComputerName);
+
swprintf(szStatusText, L"%s has %d event(s)", lpLogName, dwTotalRecords);
// Update the status bar