Author: cwittich Date: Fri Jan 9 01:46:07 2009 New Revision: 38660
URL: http://svn.reactos.org/svn/reactos?rev=38660&view=rev Log: -convert to unicode -fix a big memory leak
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] Fri Jan 9 01:46:07 2009 @@ -24,45 +24,44 @@ */
#include "eventvwr.h" -#include <windows.h> // Standard windows include file -#include <commctrl.h> // For ListView control APIs -#include <tchar.h> // For TCHAR and string functions. +#include <windows.h> +#include <commctrl.h> #include <stdio.h> #include <time.h>
#if _MSC_VER - #pragma warning(disable: 4996) // 'strdup' was declared deprecated - #define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions + #pragma warning(disable: 4996) /* 'strdup' was declared deprecated */ + #define _CRT_SECURE_NO_DEPRECATE /* all deprecated unsafe string functions */ #endif
-static const LPTSTR EVENT_SOURCE_APPLICATION = _TEXT("Application"); -static const LPTSTR EVENT_SOURCE_SECURITY = _TEXT("Security"); -static const LPTSTR EVENT_SOURCE_SYSTEM = _TEXT("System"); -static const TCHAR szWindowClass[] = _TEXT("EVENTVWR"); // the main window class name +static const LPWSTR EVENT_SOURCE_APPLICATION = L"Application"; +static const LPWSTR EVENT_SOURCE_SECURITY = L"Security"; +static const LPWSTR EVENT_SOURCE_SYSTEM = L"System"; +static const WCHAR szWindowClass[] = L"EVENTVWR"; /* the main window class name*/
//MessageFile message buffer size #define EVENT_MESSAGE_EVENTTEXT_BUFFER 1024*10 #define EVENT_MESSAGE_FILE_BUFFER 1024*10 -#define EVENT_DLL_SEPARATOR _TEXT(";") -#define EVENT_MESSAGE_FILE _TEXT("EventMessageFile") -#define EVENT_CATEGORY_MESSAGE_FILE _TEXT("CategoryMessageFile") -#define EVENT_PARAMETER_MESSAGE_FILE _TEXT("ParameterMessageFile") +#define EVENT_DLL_SEPARATOR L";" +#define EVENT_MESSAGE_FILE L"EventMessageFile" +#define EVENT_CATEGORY_MESSAGE_FILE L"CategoryMessageFile" +#define EVENT_PARAMETER_MESSAGE_FILE L"ParameterMessageFile"
#define MAX_LOADSTRING 255
-// Global Variables: -HINSTANCE hInst; // current instance -TCHAR szTitle[MAX_LOADSTRING]; // The title bar text - -// Globals -HWND hwndMainWindow; // Main window -HWND hwndListView; // ListView control -HWND hwndStatus; // Status bar - -LPTSTR lpSourceLogName = NULL; -LPTSTR lpComputerName = NULL; - -// Forward declarations of functions included in this code module: +/* Globals */ +HINSTANCE hInst; /* current instance */ +WCHAR szTitle[MAX_LOADSTRING]; /* The title bar text */ +HWND hwndMainWindow; /* Main window */ +HWND hwndListView; /* ListView control */ +HWND hwndStatus; /* Status bar */ +PEVENTLOGRECORD *g_RecordPtrs = NULL; +DWORD g_TotalRecords = 0; + +LPWSTR lpSourceLogName = NULL; +LPWSTR lpComputerName = NULL; + +/* Forward declarations of functions included in this code module: */ ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); @@ -72,9 +71,9 @@
int APIENTRY -_tWinMain(HINSTANCE hInstance, +wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, - LPTSTR lpCmdLine, + LPWSTR lpCmdLine, int nCmdShow) { MSG msg; @@ -84,18 +83,18 @@ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);
- // Whenever any of the common controls are used in your app, - // you must call InitCommonControlsEx() to register the classes - // for those controls. + /* Whenever any of the common controls are used in your app, + * you must call InitCommonControlsEx() to register the classes + * for those controls. */ iccx.dwSize = sizeof(INITCOMMONCONTROLSEX); iccx.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&iccx);
- // Initialize global strings - LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + /* Initialize global strings */ + LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); MyRegisterClass(hInstance);
- // Perform application initialization: + /* Perform application initialization: */ if (!InitInstance(hInstance, nCmdShow)) { return FALSE; @@ -103,10 +102,10 @@
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_EVENTVWR));
- // Main message loop: - while (GetMessage(&msg, NULL, 0, 0)) - { - if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + /* Main message loop: */ + while (GetMessageW(&msg, NULL, 0, 0)) + { + if (!TranslateAcceleratorW(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); @@ -116,6 +115,18 @@ return (int)msg.wParam; }
+static void FreeRecords(void) +{ + DWORD iIndex; + + if (!g_RecordPtrs) + return; + + for (iIndex = 0; iIndex < g_TotalRecords; iIndex++) + HeapFree(GetProcessHeap(), 0, (PEVENTLOGRECORD) g_RecordPtrs[iIndex]); + HeapFree(GetProcessHeap(), 0, (PEVENTLOGRECORD) g_RecordPtrs); + g_RecordPtrs = NULL; +}
VOID EventTimeToSystemTime(DWORD EventTime, @@ -139,70 +150,69 @@
void -TrimNulls(LPTSTR s) -{ - TCHAR *c; +TrimNulls(LPWSTR s) +{ + WCHAR *c;
if (s != NULL) { - c = s + _tcslen(s) - 1; - while (c >= s && _istspace(*c)) + c = s + wcslen(s) - 1; + while (c >= s && iswspace(*c)) --c; - *++c = _TEXT('\0'); + *++c = L'\0'; } }
BOOL -GetEventMessageFileDLL(IN LPCTSTR lpLogName, - IN LPCTSTR SourceName, - IN LPCTSTR EntryName, - OUT LPTSTR ExpandedName) +GetEventMessageFileDLL(IN LPCWSTR lpLogName, + IN LPCWSTR SourceName, + IN LPCWSTR EntryName, + OUT LPWSTR ExpandedName) { DWORD dwSize; BYTE szModuleName[MAX_PATH]; - TCHAR szKeyName[MAX_PATH]; + WCHAR szKeyName[MAX_PATH]; HKEY hAppKey = NULL; HKEY hSourceKey = NULL; - BOOL bReturn = FALSE; // Return - - _tcscpy(szKeyName, _TEXT("SYSTEM\CurrentControlSet\Services\EventLog")); - _tcscat(szKeyName, _TEXT("\")); - _tcscat(szKeyName, lpLogName); - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + BOOL bReturn = FALSE; + + wcscpy(szKeyName, L"SYSTEM\CurrentControlSet\Services\EventLog\"); + wcscat(szKeyName, lpLogName); + + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_READ, &hAppKey) == ERROR_SUCCESS) { - if (RegOpenKeyEx(hAppKey, + if (RegOpenKeyExW(hAppKey, SourceName, 0, KEY_READ, &hSourceKey) == ERROR_SUCCESS) { dwSize = MAX_PATH; - if (RegQueryValueEx(hSourceKey, + if (RegQueryValueExW(hSourceKey, EntryName, NULL, NULL, (LPBYTE)szModuleName, &dwSize) == ERROR_SUCCESS) { - // Returns a string containing the requested substituted environment variable. - ExpandEnvironmentStrings((LPCTSTR)szModuleName, ExpandedName, MAX_PATH); - - // Succesfull + /* Returns a string containing the requested substituted environment variable. */ + ExpandEnvironmentStringsW((LPCWSTR)szModuleName, ExpandedName, MAX_PATH); + + /* Succesfull */ bReturn = TRUE; } } } else { - MessageBox(NULL, - _TEXT("Registry access failed!"), - _TEXT("Event Log"), + MessageBoxW(NULL, + L"Registry access failed!", + L"Event Log", MB_OK | MB_ICONINFORMATION); }
@@ -217,53 +227,53 @@
BOOL -GetEventCategory(IN LPCTSTR KeyName, - IN LPCTSTR SourceName, +GetEventCategory(IN LPCWSTR KeyName, + IN LPCWSTR SourceName, IN EVENTLOGRECORD *pevlr, - OUT LPTSTR CategoryName) + OUT LPWSTR CategoryName) { HANDLE hLibrary = NULL; - TCHAR szMessageDLL[MAX_PATH]; + WCHAR szMessageDLL[MAX_PATH]; LPVOID lpMsgBuf = NULL;
if (GetEventMessageFileDLL (KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE , szMessageDLL)) { - hLibrary = LoadLibraryEx(szMessageDLL, + hLibrary = LoadLibraryExW(szMessageDLL, NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); if (hLibrary != NULL) { - // Retrieve the message string. - if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, + /* Retrieve the message string. */ + if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, hLibrary, pevlr->EventCategory, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR)&lpMsgBuf, + (LPWSTR)&lpMsgBuf, EVENT_MESSAGE_FILE_BUFFER, NULL) != 0) { if (lpMsgBuf) { - // Trim the string - TrimNulls((LPTSTR)lpMsgBuf); - - // Copy the category name - _tcscpy(CategoryName, (LPCTSTR)lpMsgBuf); + /* Trim the string */ + TrimNulls((LPWSTR)lpMsgBuf); + + /* Copy the category name */ + wcscpy(CategoryName, (LPCWSTR)lpMsgBuf); } else { - _tcscpy(CategoryName, (LPCTSTR)lpMsgBuf); + wcscpy(CategoryName, (LPCWSTR)lpMsgBuf); } } else { - _tcscpy(CategoryName, _TEXT("None")); + wcscpy(CategoryName, L"None"); }
if (hLibrary != NULL) FreeLibrary(hLibrary);
- // Free the buffer allocated by FormatMessage + /* Free the buffer allocated by FormatMessage */ if (lpMsgBuf) LocalFree(lpMsgBuf);
@@ -271,37 +281,37 @@ } }
- _tcscpy(CategoryName, _TEXT("None")); + wcscpy(CategoryName, L"None");
return FALSE; }
BOOL -GetEventMessage(IN LPCTSTR KeyName, - IN LPCTSTR SourceName, +GetEventMessage(IN LPCWSTR KeyName, + IN LPCWSTR SourceName, IN EVENTLOGRECORD *pevlr, - OUT LPTSTR EventText) + OUT LPWSTR EventText) { DWORD i; HANDLE hLibrary = NULL; - TCHAR SourceModuleName[1000]; - TCHAR ParameterModuleName[1000]; - LPTSTR lpMsgBuf = NULL; - TCHAR szStringIDNotFound[MAX_LOADSTRING]; - LPTSTR szDll; - LPTSTR szMessage; - LPTSTR *szArguments; + WCHAR SourceModuleName[1000]; + WCHAR ParameterModuleName[1000]; + LPWSTR lpMsgBuf = NULL; + WCHAR szStringIDNotFound[MAX_LOADSTRING]; + LPWSTR szDll; + LPWSTR szMessage; + LPWSTR *szArguments; BOOL bDone = FALSE;
/* TODO : GetEventMessageFileDLL can return a comma separated list of DLLs */ - if (GetEventMessageFileDLL (KeyName , SourceName, EVENT_MESSAGE_FILE , SourceModuleName)) - { - // Get the event message - szMessage = (LPTSTR)((LPBYTE)pevlr + pevlr->StringOffset); - - // Allocate space for parameters - szArguments = (LPTSTR*)malloc(sizeof(LPVOID) * pevlr->NumStrings); + if (GetEventMessageFileDLL (KeyName, SourceName, EVENT_MESSAGE_FILE, SourceModuleName)) + { + /* Get the event message */ + szMessage = (LPWSTR)((LPBYTE)pevlr + pevlr->StringOffset); + + /* Allocate space for parameters */ + szArguments = (LPWSTR*)malloc(sizeof(LPVOID) * pevlr->NumStrings); if (!szArguments) { return FALSE; @@ -309,63 +319,63 @@
for (i = 0; i < pevlr->NumStrings ; i++) { - if (_tcsstr(szMessage , _TEXT("%%"))) - { - if (GetEventMessageFileDLL(KeyName , SourceName, EVENT_PARAMETER_MESSAGE_FILE, ParameterModuleName)) + if (wcsstr(szMessage , L"%%")) + { + if (GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE, ParameterModuleName)) { - // Not yet support for reading messages from parameter message DLL + /* Not yet support for reading messages from parameter message DLL */ }
szArguments[i] = szMessage; - szMessage += _tcslen(szMessage) + 1; + szMessage += wcslen(szMessage) + 1; } else { szArguments[i] = szMessage; - szMessage += _tcslen(szMessage) + 1; + szMessage += wcslen(szMessage) + 1; } }
- szDll = _tcstok(SourceModuleName, EVENT_DLL_SEPARATOR); + szDll = wcstok(SourceModuleName, EVENT_DLL_SEPARATOR); while ((szDll != NULL) && (!bDone)) { - hLibrary = LoadLibraryEx(szDll, + hLibrary = LoadLibraryExW(szDll, NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); if (hLibrary == NULL) { - // The DLL could not be loaded try the next one (if any) - szDll = _tcstok(NULL, EVENT_DLL_SEPARATOR); + /* The DLL could not be loaded try the next one (if any) */ + szDll = wcstok(NULL, EVENT_DLL_SEPARATOR); } else { - // Retrieve the message string. - if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | + /* Retrieve the message string. */ + if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, hLibrary, pevlr->EventID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR)&lpMsgBuf, + (LPWSTR)&lpMsgBuf, 0, (va_list*)szArguments) == 0) { - // We haven't found the string , get next DLL (if any) - szDll = _tcstok(NULL, EVENT_DLL_SEPARATOR); + /* We haven't found the string , get next DLL (if any) */ + szDll = wcstok(NULL, EVENT_DLL_SEPARATOR); } else { if (lpMsgBuf) { - // The ID was found and the message was formated + /* The ID was found and the message was formated */ bDone = TRUE;
- // Trim the string - TrimNulls((LPTSTR)lpMsgBuf); - - // Copy the event text - _tcscpy(EventText ,lpMsgBuf); + /* Trim the string */ + TrimNulls((LPWSTR)lpMsgBuf); + + /* Copy the event text */ + wcscpy(EventText ,lpMsgBuf); } }
@@ -375,18 +385,18 @@
if (!bDone) { - LoadString(hInst, IDC_EVENTSTRINGIDNOTFOUND, szStringIDNotFound, MAX_LOADSTRING); - wsprintf(EventText, szStringIDNotFound, (DWORD)(pevlr->EventID & 0xFFFF), SourceName); + LoadStringW(hInst, IDC_EVENTSTRINGIDNOTFOUND, szStringIDNotFound, MAX_LOADSTRING); + swprintf(EventText, szStringIDNotFound, (DWORD)(pevlr->EventID & 0xFFFF), SourceName); }
free(szArguments);
- // No more dlls to try , return result + /* No more dlls to try, return result */ return bDone; }
- LoadString(hInst, IDC_EVENTSTRINGIDNOTFOUND, szStringIDNotFound, MAX_LOADSTRING); - wsprintf(EventText, szStringIDNotFound, (DWORD)(pevlr->EventID & 0xFFFF), SourceName); + LoadStringW(hInst, IDC_EVENTSTRINGIDNOTFOUND, szStringIDNotFound, MAX_LOADSTRING); + swprintf(EventText, szStringIDNotFound, (DWORD)(pevlr->EventID & 0xFFFF), SourceName);
return FALSE; } @@ -394,52 +404,52 @@
VOID GetEventType(IN WORD dwEventType, - OUT LPTSTR eventTypeText) + OUT LPWSTR eventTypeText) { switch (dwEventType) { case EVENTLOG_ERROR_TYPE: - LoadString(hInst, IDC_EVENTLOG_ERROR_TYPE, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_ERROR_TYPE, eventTypeText, MAX_LOADSTRING); break; case EVENTLOG_WARNING_TYPE: - LoadString(hInst, IDC_EVENTLOG_WARNING_TYPE, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_WARNING_TYPE, eventTypeText, MAX_LOADSTRING); break; case EVENTLOG_INFORMATION_TYPE: - LoadString(hInst, IDC_EVENTLOG_INFORMATION_TYPE, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_INFORMATION_TYPE, eventTypeText, MAX_LOADSTRING); break; case EVENTLOG_AUDIT_SUCCESS: - LoadString(hInst, IDC_EVENTLOG_AUDIT_SUCCESS, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_AUDIT_SUCCESS, eventTypeText, MAX_LOADSTRING); break; case EVENTLOG_AUDIT_FAILURE: - LoadString(hInst, IDC_EVENTLOG_AUDIT_FAILURE, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_AUDIT_FAILURE, eventTypeText, MAX_LOADSTRING); break; case EVENTLOG_SUCCESS: - LoadString(hInst, IDC_EVENTLOG_SUCCESS, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_SUCCESS, eventTypeText, MAX_LOADSTRING); break; default: - LoadString(hInst, IDC_EVENTLOG_UNKNOWN_TYPE, eventTypeText, MAX_LOADSTRING); + LoadStringW(hInst, IDC_EVENTLOG_UNKNOWN_TYPE, eventTypeText, MAX_LOADSTRING); break; } }
BOOL GetEventUserName(EVENTLOGRECORD *pelr, - OUT LPTSTR pszUser) + OUT LPWSTR pszUser) { PSID lpSid; - TCHAR szName[1024]; - TCHAR szDomain[1024]; + WCHAR szName[1024]; + WCHAR szDomain[1024]; SID_NAME_USE peUse; DWORD cbName = 1024; DWORD cbDomain = 1024;
- // Point to the SID. + /* Point to the SID. */ lpSid = (PSID)((LPBYTE)pelr + pelr->UserSidOffset);
- // User SID + /* User SID */ if (pelr->UserSidLength > 0) { - if (LookupAccountSid(NULL, + if (LookupAccountSidW(NULL, lpSid, szName, &cbName, @@ -447,7 +457,7 @@ &cbDomain, &peUse)) { - _tcscpy(pszUser, szName); + wcscpy(pszUser, szName); return TRUE; } } @@ -487,67 +497,66 @@
BOOL -QueryEventMessages(LPTSTR lpMachineName, - LPTSTR lpLogName) +QueryEventMessages(LPWSTR lpMachineName, + LPWSTR lpLogName) { HWND hwndDlg; HANDLE hEventLog; EVENTLOGRECORD *pevlr; - BYTE bBuffer[MAX_PATH]; DWORD dwRead, dwNeeded, dwThisRecord, dwTotalRecords, dwCurrentRecord = 1, dwRecordsToRead = 0, dwFlags; - LPTSTR lpSourceName; - LPTSTR lpComputerName; - LPTSTR lpEventStr; - LPTSTR lpData; - BOOL bResult = TRUE; // Read succeeded. - - TCHAR szWindowTitle[MAX_PATH]; - TCHAR szStatusText[MAX_PATH]; - TCHAR szLocalDate[MAX_PATH]; - TCHAR szLocalTime[MAX_PATH]; - TCHAR szEventID[MAX_PATH]; - TCHAR szEventTypeText[MAX_PATH]; - TCHAR szCategoryID[MAX_PATH]; - TCHAR szUsername[MAX_PATH]; - TCHAR szEventText[EVENT_MESSAGE_FILE_BUFFER]; - TCHAR szCategory[MAX_PATH]; + LPWSTR lpSourceName; + LPWSTR lpComputerName; + LPWSTR lpEventStr; + LPWSTR lpData; + BOOL bResult = TRUE; /* Read succeeded. */ + + WCHAR szWindowTitle[MAX_PATH]; + WCHAR szStatusText[MAX_PATH]; + WCHAR szLocalDate[MAX_PATH]; + WCHAR szLocalTime[MAX_PATH]; + WCHAR szEventID[MAX_PATH]; + WCHAR szEventTypeText[MAX_PATH]; + WCHAR szCategoryID[MAX_PATH]; + WCHAR szUsername[MAX_PATH]; + WCHAR szEventText[EVENT_MESSAGE_FILE_BUFFER]; + WCHAR szCategory[MAX_PATH];
SYSTEMTIME time; - LVITEM lviEventItem; + LVITEMW lviEventItem;
dwFlags = EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ;
lpSourceLogName = lpLogName; lpComputerName = lpMachineName;
- // Open the event log. - hEventLog = OpenEventLog(lpMachineName, + /* Open the event log. */ + hEventLog = OpenEventLogW(lpMachineName, lpLogName); if (hEventLog == NULL) { - MessageBox(NULL, - _TEXT("Could not open the event log."), - _TEXT("Event Log"), + MessageBoxW(NULL, + L"Could not open the event log.", + L"Event Log", MB_OK | MB_ICONINFORMATION); return FALSE; }
- // Disable listview redraw + /* Disable listview redraw */ SendMessage(hwndListView, WM_SETREDRAW, FALSE, 0);
- // Clear the list view + /* Clear the list view */ (void)ListView_DeleteAllItems (hwndListView); - - // Initialize the event record buffer. - pevlr = (EVENTLOGRECORD *)&bBuffer; - - // Get the record number of the oldest event log record. + FreeRecords(); + GetOldestEventLogRecord(hEventLog, &dwThisRecord);
- // Get the total number of event log records. + /* Get the total number of event log records. */ GetNumberOfEventLogRecords (hEventLog , &dwTotalRecords); - - //If we have at least 1000 records show the waiting dialog + g_TotalRecords = dwTotalRecords; + + g_RecordPtrs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwTotalRecords * sizeof(PEVENTLOGRECORD)); + + /* If we have at least 1000 records show the waiting dialog */ if (dwTotalRecords > 1000) { CreateThread(NULL, @@ -560,20 +569,23 @@
while (dwCurrentRecord < dwTotalRecords) { - pevlr = (EVENTLOGRECORD*)malloc(MAX_PATH); + pevlr = (EVENTLOGRECORD*) HeapAlloc(GetProcessHeap(), 0, sizeof(EVENTLOGRECORD) * dwTotalRecords); + g_RecordPtrs[dwCurrentRecord] = pevlr;
bResult = ReadEventLog(hEventLog, // Event log handle dwFlags, // Sequential read 0, // Ignored for sequential read pevlr, // Pointer to buffer - MAX_PATH, // Size of buffer + sizeof(EVENTLOGRECORD), // Size of buffer &dwRead, // Number of bytes read &dwNeeded); // Bytes in the next record if((!bResult) && (GetLastError () == ERROR_INSUFFICIENT_BUFFER)) { - pevlr = (EVENTLOGRECORD*)malloc (dwNeeded); - - ReadEventLog(hEventLog, // event log handle + HeapFree(GetProcessHeap(), 0, pevlr); + pevlr = (EVENTLOGRECORD*) HeapAlloc(GetProcessHeap(), 0, dwNeeded); + g_RecordPtrs[dwCurrentRecord] = pevlr; + + ReadEventLogW(hEventLog, // event log handle dwFlags, // read flags 0, // offset; default is 0 pevlr, // pointer to buffer @@ -584,21 +596,21 @@
while (dwRead > 0) { - _tcscpy(szUsername , _TEXT("N/A")); - _tcscpy(szEventText , _TEXT("N/A")); - _tcscpy(szCategory , _TEXT("None")); + wcscpy(szUsername , L"N/A"); + wcscpy(szEventText , L"N/A"); + wcscpy(szCategory , L"None");
// Get the event source name. - lpSourceName = (LPTSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD)); + lpSourceName = (LPWSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD));
// Get the computer name - lpComputerName = (LPTSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD) + (_tcslen(lpSourceName) + 1) * sizeof(TCHAR)); + lpComputerName = (LPWSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD) + (wcslen(lpSourceName) + 1) * sizeof(WCHAR));
// This ist the data section of the current event - lpData = (LPTSTR)((LPBYTE)pevlr + pevlr->DataOffset); + lpData = (LPWSTR)((LPBYTE)pevlr + pevlr->DataOffset);
// This is the text of the current event - lpEventStr = (LPTSTR)((LPBYTE)pevlr + pevlr->StringOffset); + lpEventStr = (LPWSTR)((LPBYTE)pevlr + pevlr->StringOffset);
// Compute the event type EventTimeToSystemTime(pevlr->TimeWritten, &time); @@ -606,14 +618,14 @@ // Get the username that generated the event GetEventUserName(pevlr, szUsername);
- GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, szLocalDate, MAX_PATH); - GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, szLocalTime, MAX_PATH); + GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, szLocalDate, MAX_PATH); + GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, szLocalTime, MAX_PATH);
GetEventType(pevlr->EventType, szEventTypeText); GetEventCategory(lpLogName, lpSourceName, pevlr, szCategory);
- wsprintf(szEventID, _TEXT("%u"), (DWORD)(pevlr->EventID & 0xFFFF)); - wsprintf(szCategoryID, _TEXT("%u"), (DWORD)(pevlr->EventCategory)); + swprintf(szEventID, L"%u", (DWORD)(pevlr->EventID & 0xFFFF)); + swprintf(szCategoryID, L"%u", (DWORD)(pevlr->EventCategory));
lviEventItem.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; lviEventItem.iItem = 0; @@ -665,24 +677,22 @@
dwRecordsToRead--; dwCurrentRecord++; - - pevlr = (EVENTLOGRECORD *)&bBuffer; }
// All events loaded EndDialog(hwndDlg, 0);
- wsprintf(szWindowTitle, _TEXT("%s - %s Log on \\%s"), szTitle, lpLogName, lpComputerName); - wsprintf(szStatusText, _TEXT("%s has %d event(s)"), lpLogName, dwTotalRecords); + swprintf(szWindowTitle, L"%s - %s Log on \\%s", szTitle, lpLogName, lpComputerName); + swprintf(szStatusText, L"%s has %d event(s)", lpLogName, dwTotalRecords);
// Update the status bar - SendMessage(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)szStatusText); + SendMessageW(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)szStatusText);
// Set the window title - SetWindowText(hwndMainWindow, szWindowTitle); + SetWindowTextW(hwndMainWindow, szWindowTitle);
// Resume list view redraw - SendMessage(hwndListView, WM_SETREDRAW, TRUE, 0); + SendMessageW(hwndListView, WM_SETREDRAW, TRUE, 0);
// Close the event log. CloseEventLog(hEventLog); @@ -715,7 +725,7 @@ ATOM MyRegisterClass(HINSTANCE hInstance) { - WNDCLASSEX wcex; + WNDCLASSEXW wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
@@ -731,7 +741,7 @@ wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
- return RegisterClassEx(&wcex); + return RegisterClassExW(&wcex); }
@@ -750,11 +760,11 @@ int nCmdShow) { HIMAGELIST hSmall; - LVCOLUMN lvc = {0}; + LVCOLUMNW lvc = {0};
hInst = hInstance; // Store instance handle in our global variable
- hwndMainWindow = CreateWindow(szWindowClass, + hwndMainWindow = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, @@ -767,9 +777,9 @@ return FALSE; }
- hwndStatus = CreateWindowEx(0, // no extended styles - STATUSCLASSNAME, // status bar - _TEXT("Done."), // no text + hwndStatus = CreateWindowExW(0, // no extended styles + STATUSCLASSNAMEW, // status bar + L"Done.", // no text WS_CHILD | WS_BORDER | WS_VISIBLE, // styles 0, 0, 0, 0, // x, y, cx, cy hwndMainWindow, // parent window @@ -780,9 +790,9 @@ // Create our listview child window. Note that I use WS_EX_CLIENTEDGE // and WS_BORDER to create the normal "sunken" look. Also note that // LVS_EX_ styles cannot be set in CreateWindowEx(). - hwndListView = CreateWindowEx(WS_EX_CLIENTEDGE, - WC_LISTVIEW, - _TEXT(""), + hwndListView = CreateWindowExW(WS_EX_CLIENTEDGE, + WC_LISTVIEWW, + L"", LVS_SHOWSELALWAYS | WS_CHILD | WS_VISIBLE | LVS_REPORT, 0, 0, @@ -814,39 +824,39 @@ // Now set up the listview with its columns. lvc.mask = LVCF_TEXT | LVCF_WIDTH; lvc.cx = 90; - lvc.pszText = _T("Type"); + lvc.pszText = L"Type"; (void)ListView_InsertColumn(hwndListView, 0, &lvc);
lvc.cx = 70; - lvc.pszText = _T("Date"); + lvc.pszText = L"Date"; (void)ListView_InsertColumn(hwndListView, 1, &lvc);
lvc.cx = 70; - lvc.pszText = _T("Time"); + lvc.pszText = L"Time"; (void)ListView_InsertColumn(hwndListView, 2, &lvc);
lvc.cx = 150; - lvc.pszText = _T("Source"); + lvc.pszText = L"Source"; (void)ListView_InsertColumn(hwndListView, 3, &lvc);
lvc.cx = 100; - lvc.pszText = _T("Category"); + lvc.pszText = L"Category"; (void)ListView_InsertColumn(hwndListView, 4, &lvc);
lvc.cx = 60; - lvc.pszText = _T("Event"); + lvc.pszText = L"Event"; (void)ListView_InsertColumn(hwndListView, 5, &lvc);
lvc.cx = 120; - lvc.pszText = _T("User"); + lvc.pszText = L"User"; (void)ListView_InsertColumn(hwndListView, 6, &lvc);
lvc.cx = 100; - lvc.pszText = _T("Computer"); + lvc.pszText = L"Computer"; (void)ListView_InsertColumn(hwndListView, 7, &lvc);
lvc.cx = 0; - lvc.pszText = _T("Event Data"); + lvc.pszText = L"Event Data"; (void)ListView_InsertColumn(hwndListView, 8, &lvc);
ShowWindow(hwndMainWindow, nCmdShow); @@ -955,9 +965,9 @@ break;
case IDM_HELP: - MessageBox(NULL, - _TEXT("Help not implemented yet!"), - _TEXT("Event Log"), + MessageBoxW(NULL, + L"Help not implemented yet!", + L"Event Log", MB_OK | MB_ICONINFORMATION); break;
@@ -987,8 +997,8 @@ SendMessage(hwndStatus, message, wParam, lParam); } break; - case WM_DESTROY: + FreeRecords(); PostQuitMessage(0); break;
@@ -1027,18 +1037,18 @@ VOID DisplayEvent(HWND hDlg) { - TCHAR szEventType[MAX_PATH]; - TCHAR szTime[MAX_PATH]; - TCHAR szDate[MAX_PATH]; - TCHAR szUser[MAX_PATH]; - TCHAR szComputer[MAX_PATH]; - TCHAR szSource[MAX_PATH]; - TCHAR szCategory[MAX_PATH]; - TCHAR szEventID[MAX_PATH]; - TCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER]; - TCHAR szEventData[MAX_PATH]; + WCHAR szEventType[MAX_PATH]; + WCHAR szTime[MAX_PATH]; + WCHAR szDate[MAX_PATH]; + WCHAR szUser[MAX_PATH]; + WCHAR szComputer[MAX_PATH]; + WCHAR szSource[MAX_PATH]; + WCHAR szCategory[MAX_PATH]; + WCHAR szEventID[MAX_PATH]; + WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER]; + WCHAR szEventData[MAX_PATH]; BOOL bEventData = FALSE; - LVITEM li; + LVITEMW li; EVENTLOGRECORD* pevlr; int iIndex;
@@ -1055,14 +1065,14 @@
if (iIndex != -1) { - ListView_GetItemText(hwndListView, iIndex, 0, szEventType, sizeof(szEventType)); - ListView_GetItemText(hwndListView, iIndex, 1, szDate, sizeof(szDate)); - ListView_GetItemText(hwndListView, iIndex, 2, szTime, sizeof(szTime)); - ListView_GetItemText(hwndListView, iIndex, 3, szSource, sizeof(szSource)); - ListView_GetItemText(hwndListView, iIndex, 4, szCategory, sizeof(szCategory)); - ListView_GetItemText(hwndListView, iIndex, 5, szEventID, sizeof(szEventID)); - ListView_GetItemText(hwndListView, iIndex, 6, szUser, sizeof(szUser)); - ListView_GetItemText(hwndListView, iIndex, 7, szComputer, sizeof(szComputer)); + ListView_GetItemText(hwndListView, iIndex, 0, szEventType, sizeof(szEventType) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 1, szDate, sizeof(szDate) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 2, szTime, sizeof(szTime) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 3, szSource, sizeof(szSource) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 4, szCategory, sizeof(szCategory) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 5, szEventID, sizeof(szEventID) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 6, szUser, sizeof(szUser) * sizeof(WCHAR)); + ListView_GetItemText(hwndListView, iIndex, 7, szComputer, sizeof(szComputer) * sizeof(WCHAR));
bEventData = !(pevlr->DataLength == 0);
@@ -1081,22 +1091,22 @@ EnableWindow(GetDlgItem(hDlg, IDC_BYTESRADIO), bEventData); EnableWindow(GetDlgItem(hDlg, IDC_WORDRADIO), bEventData);
- SetDlgItemText(hDlg, IDC_EVENTDATESTATIC, szDate); - SetDlgItemText(hDlg, IDC_EVENTTIMESTATIC, szTime); - SetDlgItemText(hDlg, IDC_EVENTUSERSTATIC, szUser); - SetDlgItemText(hDlg, IDC_EVENTSOURCESTATIC, szSource); - SetDlgItemText(hDlg, IDC_EVENTCOMPUTERSTATIC, szComputer); - SetDlgItemText(hDlg, IDC_EVENTCATEGORYSTATIC, szCategory); - SetDlgItemText(hDlg, IDC_EVENTIDSTATIC, szEventID); - SetDlgItemText(hDlg, IDC_EVENTTYPESTATIC, szEventType); - SetDlgItemText(hDlg, IDC_EVENTTEXTEDIT, szEventText); - SetDlgItemText(hDlg, IDC_EVENTDATAEDIT, szEventData); + SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, szDate); + SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, szTime); + SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, szUser); + SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, szSource); + SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, szComputer); + SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, szCategory); + SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, szEventID); + SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, szEventType); + SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText); + SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, szEventData); } else { - MessageBox(NULL, - _TEXT("No Items in ListView"), - _TEXT("Error"), + MessageBoxW(NULL, + L"No Items in ListView", + L"Error", MB_OK | MB_ICONINFORMATION); } } @@ -1164,9 +1174,9 @@ return (INT_PTR)TRUE;
case IDHELP: - MessageBox(NULL, - _TEXT("Help not implemented yet!"), - _TEXT("Event Log"), + MessageBoxW(NULL, + L"Help not implemented yet!", + L"Event Log", MB_OK | MB_ICONINFORMATION); return (INT_PTR)TRUE;