Author: cfinck Date: Sat Oct 13 14:15:37 2007 New Revision: 29547
URL: http://svn.reactos.org/svn/reactos?rev=29547&view=rev Log: Add an Event Log Viewer coded by Marc Piulachs (marc DOT piulachs AT codexchange DOT net) The icons were taken from the comctl32.dll. I did not add it to the "reactos.dff" as ReactOS doesn't support Event Logs yet. See issue #2602 for more details.
Added: trunk/reactos/base/applications/mscutils/eventvwr/ (with props) trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c (with props) trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.h (with props) trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild (with props) trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rc (with props) trunk/reactos/base/applications/mscutils/eventvwr/lang/ (with props) trunk/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc (with props) trunk/reactos/base/applications/mscutils/eventvwr/res/ (with props) trunk/reactos/base/applications/mscutils/eventvwr/res/error.ico (with props) trunk/reactos/base/applications/mscutils/eventvwr/res/eventvwr.ico (with props) trunk/reactos/base/applications/mscutils/eventvwr/res/info.ico (with props) trunk/reactos/base/applications/mscutils/eventvwr/res/warning.ico (with props) trunk/reactos/base/applications/mscutils/eventvwr/resource.h (with props) trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc (with props) Modified: trunk/reactos/base/applications/mscutils/directory.rbuild (contents, props changed)
Modified: trunk/reactos/base/applications/mscutils/directory.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/directory.rbuild (original) +++ trunk/reactos/base/applications/mscutils/directory.rbuild Sat Oct 13 14:15:37 2007 @@ -1,10 +1,13 @@ -<?xml version="1.0"?> -<!DOCTYPE group SYSTEM "../../../tools/rbuild/project.dtd"> -<group xmlns:xi="http://www.w3.org/2001/XInclude"> - <directory name="devmgmt"> - <xi:include href="devmgmt/devmgmt.rbuild" /> - </directory> - <directory name="servman"> - <xi:include href="servman/servman.rbuild" /> - </directory> -</group> +<?xml version="1.0"?> +<!DOCTYPE group SYSTEM "../../../tools/rbuild/project.dtd"> +<group xmlns:xi="http://www.w3.org/2001/XInclude"> + <directory name="devmgmt"> + <xi:include href="devmgmt/devmgmt.rbuild" /> + </directory> + <directory name="eventvwr"> + <xi:include href="eventvwr/eventvwr.rbuild" /> + </directory> + <directory name="servman"> + <xi:include href="servman/servman.rbuild" /> + </directory> +</group>
Propchange: trunk/reactos/base/applications/mscutils/directory.rbuild ------------------------------------------------------------------------------ svn:eol-style = native
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Sat Oct 13 14:15:37 2007 @@ -1,0 +1,7 @@ +GNUmakefile +*.vcproj +*.user +*.cbp +*.ncb +*.suo +*.sln
Added: 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 (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c Sat Oct 13 14:15:37 2007 @@ -1,0 +1,1137 @@ +/* + * ReactOS Win32 Applications + * Copyright (C) 2007 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * COPYRIGHT : See COPYING in the top level directory + * PROJECT : Event Log Viewer + * FILE : eventvwr.c + * PROGRAMMER: Marc Piulachs (marc.piulachs at codexchange [dot] net) + */ + +#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 <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 +#endif + +static const LPSTR EVENT_SOURCE_APPLICATION = "Application"; +static const LPSTR EVENT_SOURCE_SECURITY = "Security"; +static const LPSTR EVENT_SOURCE_SYSTEM = "System"; + +//MessageFile message buffer size +#define EVENT_MESSAGE_FILE_BUFFER 1024*10 +#define EVENT_DLL_SEPARATOR ";" +#define EVENT_MESSAGE_FILE "EventMessageFile" +#define EVENT_CATEGORY_MESSAGE_FILE "CategoryMessageFile" +#define EVENT_PARAMETER_MESSAGE_FILE "ParameterMessageFile" + +#define MAX_LOADSTRING 255 + +// Global Variables: +HINSTANCE hInst; // current instance +TCHAR szTitle[MAX_LOADSTRING]; // The title bar text +TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name + +// 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: +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK About (HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK EventDetails (HWND, UINT, WPARAM, LPARAM); +static INT_PTR CALLBACK StatusMessageWindowProc (HWND, UINT, WPARAM, LPARAM); + +int APIENTRY _tWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + MSG msg; + HACCEL hAccelTable; + INITCOMMONCONTROLSEX iccx; + + 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. + iccx.dwSize = sizeof(INITCOMMONCONTROLSEX); + iccx.dwICC = ICC_LISTVIEW_CLASSES; + InitCommonControlsEx(&iccx); + + // Initialize global strings + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_EVENTVWR, szWindowClass, MAX_LOADSTRING); + MyRegisterClass(hInstance); + + // Perform application initialization: + if (!InitInstance (hInstance, nCmdShow)) + { + return FALSE; + } + + hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_EVENTVWR)); + + // Main message loop: + while (GetMessage(&msg, NULL, 0, 0)) + { + if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + return (int) msg.wParam; +} + +VOID EventTimeToSystemTime (DWORD EventTime, SYSTEMTIME *pSystemTime) +{ + SYSTEMTIME st1970 = { 1970, 1, 0, 1, 0, 0, 0, 0 }; + FILETIME ftLocal; + union { + FILETIME ft; + ULONGLONG ll; + } u1970, uUCT; + + uUCT.ft.dwHighDateTime = 0; + uUCT.ft.dwLowDateTime = EventTime; + SystemTimeToFileTime(&st1970, &u1970.ft); + uUCT.ll = uUCT.ll * 10000000 + u1970.ll; + FileTimeToLocalFileTime(&uUCT.ft, &ftLocal); + FileTimeToSystemTime(&ftLocal, pSystemTime); +} + +void +TrimNulls ( LPSTR s ) +{ + char *c; + + if ( s != (char *) NULL ) + { + c = s + strlen ( s ) - 1; + while ( c >= s && isspace ( *c ) ) + --c; + *++c = '\0'; + } +} + +BOOL GetEventMessageFileDLL( + IN LPCTSTR lpLogName, + IN LPCTSTR SourceName, + IN LPCTSTR EntryName, + OUT LPSTR ExpandedName) +{ + DWORD dwSize; + BYTE szModuleName[MAX_PATH]; + TCHAR szKeyName[MAX_PATH]; + HKEY hAppKey = NULL; + HKEY hSourceKey = NULL; + BOOL bReturn = FALSE; // Return + + _tcscpy(szKeyName, TEXT("SYSTEM\CurrentControlSet\Services\EventLog")); + _tcscat(szKeyName, _T("\")); + _tcscat(szKeyName, lpLogName); + + if (RegOpenKeyEx( + HKEY_LOCAL_MACHINE, + szKeyName, + 0, + KEY_READ, + &hAppKey) == ERROR_SUCCESS) + { + if (RegOpenKeyEx( + hAppKey, + SourceName, + 0, + KEY_READ, + &hSourceKey) == ERROR_SUCCESS) + { + dwSize = MAX_PATH; + if (RegQueryValueEx( + 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 + bReturn = TRUE; + } + } + } + else + { + MessageBox (NULL , + _TEXT("Registry access failed!") , + _TEXT("Event Log") , + MB_OK | MB_ICONINFORMATION); + } + + if (hSourceKey != NULL) + RegCloseKey(hSourceKey); + + if (hAppKey != NULL) + RegCloseKey(hAppKey); + + return bReturn; +} + +BOOL GetEventCategory( + IN LPCTSTR KeyName, + IN LPCTSTR SourceName, + IN EVENTLOGRECORD *pevlr, + OUT LPTSTR CategoryName) +{ + HANDLE hLibrary = NULL; + TCHAR szMessageDLL[MAX_PATH]; + LPVOID lpMsgBuf = NULL; + + if(GetEventMessageFileDLL (KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE , szMessageDLL)) + { + hLibrary = LoadLibraryEx( + 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, + hLibrary, + pevlr->EventCategory, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR)&lpMsgBuf, + EVENT_MESSAGE_FILE_BUFFER, + NULL) != 0) + { + if (lpMsgBuf) + { + //Trim the string + TrimNulls ((LPSTR)lpMsgBuf); + + // Copy the category name + strcpy (CategoryName, (LPCTSTR)lpMsgBuf); + } + else + { + strcpy (CategoryName, (LPCTSTR)lpMsgBuf); + } + }else{ + strcpy (CategoryName, "None"); + } + + if(hLibrary != NULL) + FreeLibrary(hLibrary); + + // Free the buffer allocated by FormatMessage + if (lpMsgBuf) + LocalFree(lpMsgBuf); + + return TRUE; + } + } + + strcpy (CategoryName, "None"); + + return FALSE; +} + +BOOL GetEventMessage( + IN LPCTSTR KeyName, + IN LPCTSTR SourceName, + IN EVENTLOGRECORD *pevlr, + OUT LPTSTR EventText) +{ + DWORD i; + HANDLE hLibrary = NULL; + char SourceModuleName[1000]; + char ParameterModuleName[1000]; + LPTSTR lpMsgBuf = NULL; + TCHAR szStringIDNotFound[MAX_LOADSTRING]; + LPTSTR szDll; + LPTSTR szMessage; + LPTSTR *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); + + for (i = 0; i < pevlr->NumStrings ; i++) + { + if (strstr(szMessage , "%%")) + { + if (GetEventMessageFileDLL (KeyName , SourceName, EVENT_PARAMETER_MESSAGE_FILE , ParameterModuleName)) + { + //Not yet support for reading messages from parameter message DLL + } + + szArguments[i] = szMessage; + szMessage += strlen(szMessage) + 1; + } + else + { + szArguments[i] = szMessage; + szMessage += strlen(szMessage) + 1; + } + } + + szDll = strtok(SourceModuleName, EVENT_DLL_SEPARATOR); + while ((szDll != NULL) && (!bDone)) + { + hLibrary = LoadLibraryEx( + 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 = strtok (NULL, EVENT_DLL_SEPARATOR); + } + else + { + // Retrieve the message string. + if(FormatMessage( + 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, + 0, + szArguments) == 0) + { + // We haven't found the string , get next DLL (if any) + szDll = strtok (NULL, EVENT_DLL_SEPARATOR); + } + else + { + if (lpMsgBuf) + { + // The ID was found and the message was formated + bDone = TRUE; + + //Trim the string + TrimNulls ((LPSTR)lpMsgBuf); + + // Copy the event text + strcpy (EventText ,lpMsgBuf); + } + } + + FreeLibrary (hLibrary); + } + } + + if (!bDone) + { + LoadString(hInst, IDC_EVENTSTRINGIDNOTFOUND, szStringIDNotFound, MAX_LOADSTRING); + wsprintf (EventText, szStringIDNotFound , (DWORD)(pevlr->EventID & 0xFFFF) , SourceName ); + } + + // No more dlls to try , return result + return bDone; + } + + LoadString(hInst, IDC_EVENTSTRINGIDNOTFOUND, szStringIDNotFound, MAX_LOADSTRING); + wsprintf (EventText, szStringIDNotFound , (DWORD)(pevlr->EventID & 0xFFFF) , SourceName ); + + return FALSE; +} + +char* GetEventType (WORD dwEventType) +{ + switch(dwEventType) + { + case EVENTLOG_ERROR_TYPE: + return "Error"; + break; + case EVENTLOG_WARNING_TYPE: + return "Warning"; + break; + case EVENTLOG_INFORMATION_TYPE: + return "Information"; + break; + case EVENTLOG_AUDIT_SUCCESS: + return "Audit Success"; + break; + case EVENTLOG_AUDIT_FAILURE: + return "Audit Failure"; + break; + default: + return "Unknown Event"; + break; + } +} + +BOOL +GetEventUserName (EVENTLOGRECORD *pelr, OUT LPSTR pszUser) +{ + PSID lpSid; + char szName[1024]; + char szDomain[1024]; + SID_NAME_USE peUse; + DWORD cbName = 1024; + DWORD cbDomain = 1024; + + // Point to the SID. + lpSid = (PSID)((LPBYTE) pelr + pelr->UserSidOffset); + + // User SID + if(pelr->UserSidLength > 0) + { + if (LookupAccountSid( + NULL, + lpSid, + szName, + &cbName, + szDomain, + &cbDomain, + &peUse)) + { + strcpy (pszUser , szName); + return TRUE; + } + } + + return FALSE; +} + +static DWORD WINAPI +ShowStatusMessageThread( + IN LPVOID lpParameter) +{ + HWND *phWnd = (HWND *)lpParameter; + HWND hWnd; + MSG Msg; + + hWnd = CreateDialogParam( + hInst, + MAKEINTRESOURCE(IDD_PROGRESSBOX), + GetDesktopWindow(), + StatusMessageWindowProc, + (LPARAM)NULL); + if (!hWnd) + return 0; + *phWnd = hWnd; + + ShowWindow(hWnd, SW_SHOW); + + /* Message loop for the Status window */ + while (GetMessage(&Msg, NULL, 0, 0)) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + + return 0; +} + +VOID QueryEventMessages ( + LPTSTR lpMachineName , + LPTSTR lpLogName) +{ + HWND hwndDlg; + HANDLE hEventLog; + EVENTLOGRECORD *pevlr; + BYTE bBuffer[MAX_PATH]; + DWORD dwRead, dwNeeded, dwThisRecord , dwTotalRecords , dwCurrentRecord = 1 , dwRecordsToRead = 0 , dwFlags; + LPSTR lpSourceName; + LPSTR lpComputerName; + LPSTR lpEventStr; + LPSTR lpData; + BOOL bResult = TRUE; // Read succeeded. + + char szWindowTitle[MAX_PATH]; + char szStatusText[MAX_PATH]; + char szLocalDate[MAX_PATH]; + char szLocalTime[MAX_PATH]; + char szEventID[MAX_PATH]; + char szCategoryID[MAX_PATH]; + char szUsername[MAX_PATH]; + char szEventText[EVENT_MESSAGE_FILE_BUFFER]; + char szCategory[MAX_PATH]; + + SYSTEMTIME time; + LVITEM lviEventItem; + + dwFlags = EVENTLOG_FORWARDS_READ | EVENTLOG_SEQUENTIAL_READ; + + lpSourceLogName = lpLogName; + lpComputerName = lpMachineName; + + // Open the event log. + hEventLog = OpenEventLog( + lpMachineName, + lpLogName); + + if (hEventLog == NULL) + { + MessageBox (NULL , + _TEXT("Could not open the event log.") , + _TEXT("Event Log") , + MB_OK | MB_ICONINFORMATION); + return; + } + + //Disable listview redraw + SendMessage(hwndListView, WM_SETREDRAW, FALSE, 0); + + // 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. + GetOldestEventLogRecord(hEventLog, &dwThisRecord); + + // Get the total number of event log records. + GetNumberOfEventLogRecords (hEventLog , &dwTotalRecords); + + //If we have at least 1000 records show the waiting dialog + if (dwTotalRecords > 1000) + { + CreateThread( + NULL, + 0, + ShowStatusMessageThread, + (LPVOID)&hwndDlg, + 0, + NULL); + } + + while (dwCurrentRecord < dwTotalRecords) + { + pevlr = (EVENTLOGRECORD*)malloc(MAX_PATH); + + bResult = ReadEventLog( + hEventLog, // Event log handle + dwFlags, // Sequential read + 0, // Ignored for sequential read + pevlr, // Pointer to buffer + MAX_PATH, // 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 + dwFlags, // read flags + 0, // offset; default is 0 + pevlr, // pointer to buffer + dwNeeded, // size of buffer + &dwRead, // number of bytes read + &dwNeeded); // bytes in next record + } + + while (dwRead > 0) + { + strcpy (szUsername , "N/A"); + strcpy (szEventText , "N/A"); + strcpy (szCategory , "None"); + + // Get the event source name. + lpSourceName = (LPSTR) ((LPBYTE) pevlr + sizeof(EVENTLOGRECORD)); + + // Get the computer name + lpComputerName = (LPSTR) ((LPBYTE) pevlr + sizeof(EVENTLOGRECORD) + lstrlen(lpSourceName) + 1); + + // This ist the data section of the current event + lpData = (LPSTR) ((LPBYTE)pevlr + pevlr->DataOffset); + + // This is the text of the current event + lpEventStr = (LPSTR) ((LPBYTE) pevlr + pevlr->StringOffset); + + // Compute the event type + EventTimeToSystemTime(pevlr->TimeWritten, &time); + + // 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 ); + + GetEventCategory (lpLogName , lpSourceName , pevlr , szCategory); + //GetEventMessage (lpLogName , lpSourceName , pevlr , szEventText); + + wsprintf (szEventID, "%u", (DWORD)(pevlr->EventID & 0xFFFF)); + wsprintf (szCategoryID, "%u", (DWORD)(pevlr->EventCategory)); + + lviEventItem.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; + lviEventItem.iItem = 0; + lviEventItem.iSubItem = 0; + lviEventItem.lParam = (LPARAM)pevlr; + + switch(pevlr->EventType) + { + case EVENTLOG_ERROR_TYPE: + lviEventItem.pszText = "Error"; + lviEventItem.iImage = 2; + break; + case EVENTLOG_AUDIT_FAILURE: + lviEventItem.pszText = "Audit Failure"; + lviEventItem.iImage = 2; + break; + case EVENTLOG_WARNING_TYPE: + lviEventItem.pszText = "Warning"; + lviEventItem.iImage = 1; + break; + case EVENTLOG_INFORMATION_TYPE: + lviEventItem.pszText = "Information"; + lviEventItem.iImage = 0; + break; + case EVENTLOG_AUDIT_SUCCESS: + lviEventItem.pszText = "Audit Success"; + lviEventItem.iImage = 0; + break; + case EVENTLOG_SUCCESS: + lviEventItem.pszText = "Success"; + lviEventItem.iImage = 0; + break; + } + + lviEventItem.iItem = ListView_InsertItem(hwndListView, &lviEventItem); + + ListView_SetItemText(hwndListView, lviEventItem.iItem, 1, szLocalDate); + ListView_SetItemText(hwndListView, lviEventItem.iItem, 2, szLocalTime); + ListView_SetItemText(hwndListView, lviEventItem.iItem, 3, lpSourceName); + ListView_SetItemText(hwndListView, lviEventItem.iItem, 4, szCategory); + 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 + + dwRead -= pevlr->Length; + pevlr = (EVENTLOGRECORD *) ((LPBYTE) pevlr + pevlr->Length); + } + + dwRecordsToRead--; + dwCurrentRecord++; + + pevlr = (EVENTLOGRECORD *) &bBuffer; + } + + //All events loaded + EndDialog(hwndDlg, 0); + + wsprintf (szWindowTitle, "%s - %s Log on \\%s", szTitle , lpLogName , lpComputerName); + wsprintf (szStatusText, "%s has %d event(s)", lpLogName , dwTotalRecords); + + //Update the status bar + SendMessage (hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)szStatusText); + + //Set the window title + SetWindowText ( hwndMainWindow , szWindowTitle); + + //Resume list view redraw + SendMessage(hwndListView, WM_SETREDRAW, TRUE, 0); + + // Close the event log. + CloseEventLog(hEventLog); +} + +VOID +Refresh (VOID) +{ + QueryEventMessages( + lpComputerName , + lpSourceLogName); +} + +// +// FUNCTION: MyRegisterClass() +// +// PURPOSE: Registers the window class. +// +// COMMENTS: +// +// This function and its usage are only necessary if you want this code +// to be compatible with Win32 systems prior to the 'RegisterClassEx' +// function that was added to Windows 95. It is important to call this function +// so that the application will get 'well formed' small icons associated +// with it. +// +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_EVENTVWR)); + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = MAKEINTRESOURCE(IDC_EVENTVWR); + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); + + return RegisterClassEx(&wcex); +} + +// +// FUNCTION: InitInstance(HINSTANCE, int) +// +// PURPOSE: Saves instance handle and creates main window +// +// COMMENTS: +// +// In this function, we save the instance handle in a global variable and +// create and display the main program window. +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HIMAGELIST hSmall; + LVCOLUMN lvc = {0}; + + hInst = hInstance; // Store instance handle in our global variable + + hwndMainWindow = CreateWindow( + szWindowClass, + szTitle, + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, + NULL, + NULL, + hInstance, + NULL); + + if (!hwndMainWindow) + { + return FALSE; + } + + hwndStatus = CreateWindowEx( + 0, // no extended styles + STATUSCLASSNAME, // status bar + "Done.", // no text + WS_CHILD | WS_BORDER | WS_VISIBLE, // styles + 0, 0, 0, 0, // x, y, cx, cy + hwndMainWindow, // parent window + (HMENU)100, // window ID + hInstance, // instance + NULL); // window data + + // 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, + _T(""), + LVS_SHOWSELALWAYS | WS_CHILD | WS_VISIBLE | LVS_REPORT, + 0, + 0, + 243, + 200, + hwndMainWindow, + NULL, + hInstance, + NULL); + + // After the ListView is created, we can add extended list view styles. + (void)ListView_SetExtendedListViewStyle (hwndListView, LVS_EX_FULLROWSELECT); + + // Create the ImageList + hSmall = ImageList_Create( + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + ILC_MASK, + 1, + 1); + + // Add event type icons to ImageList + ImageList_AddIcon (hSmall, LoadIcon(hInstance, MAKEINTRESOURCE(IDI_INFORMATIONICON))); + ImageList_AddIcon (hSmall, LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WARNINGICON))); + ImageList_AddIcon (hSmall, LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ERRORICON))); + + // Assign ImageList to List View + (void)ListView_SetImageList (hwndListView, hSmall, LVSIL_SMALL); + + // Now set up the listview with its columns. + lvc.mask = LVCF_TEXT | LVCF_WIDTH; + lvc.cx = 90; + lvc.pszText = _T("Type"); + (void)ListView_InsertColumn(hwndListView, 0, &lvc); + + lvc.cx = 70; + lvc.pszText = _T("Date"); + (void)ListView_InsertColumn(hwndListView, 1, &lvc); + + lvc.cx = 70; + lvc.pszText = _T("Time"); + (void)ListView_InsertColumn(hwndListView, 2, &lvc); + + lvc.cx = 150; + lvc.pszText = _T("Source"); + (void)ListView_InsertColumn(hwndListView, 3, &lvc); + + lvc.cx = 100; + lvc.pszText = _T("Category"); + (void)ListView_InsertColumn(hwndListView, 4, &lvc); + + lvc.cx = 60; + lvc.pszText = _T("Event"); + (void)ListView_InsertColumn(hwndListView, 5, &lvc); + + lvc.cx = 120; + lvc.pszText = _T("User"); + (void)ListView_InsertColumn(hwndListView, 6, &lvc); + + lvc.cx = 100; + lvc.pszText = _T("Computer"); + (void)ListView_InsertColumn(hwndListView, 7, &lvc); + + lvc.cx = 0; + lvc.pszText = _T("Event Data"); + (void)ListView_InsertColumn(hwndListView, 8, &lvc); + + ShowWindow(hwndMainWindow, nCmdShow); + UpdateWindow(hwndMainWindow); + + QueryEventMessages ( + lpComputerName, // Use the local computer. + EVENT_SOURCE_APPLICATION); // The event log category + + return TRUE; +} + +// +// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) +// +// PURPOSE: Processes messages for the main window. +// +// WM_COMMAND - process the application menu +// WM_PAINT - Paint the main window +// WM_DESTROY - post a quit message and return +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + int wmId, wmEvent; + RECT rect; + NMHDR *hdr; + HMENU hMenu ; + + switch (message) + { + case WM_NOTIFY : + switch(((LPNMHDR)lParam)->code) + { + case NM_DBLCLK : + hdr = (NMHDR FAR*)lParam; + if(hdr->hwndFrom == hwndListView) + { + LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)lParam; + + if(lpnmitem->iItem != -1) + { + DialogBox (hInst, MAKEINTRESOURCE(IDD_EVENTDETAILDIALOG), hWnd, EventDetails); + } + } + break; + } + break; + case WM_COMMAND: + wmId = LOWORD(wParam); + wmEvent = HIWORD(wParam); + + if ((wmId == ID_LOG_APPLICATION) || + (wmId == ID_LOG_SYSTEM) || + (wmId == ID_LOG_SECURITY)) + { + hMenu = GetMenu (hWnd) ; // get the menu handle. Use it below + + CheckMenuItem (hMenu, ID_LOG_APPLICATION , MF_UNCHECKED) ; + CheckMenuItem (hMenu, ID_LOG_SYSTEM , MF_UNCHECKED) ; + CheckMenuItem (hMenu, ID_LOG_SECURITY , MF_UNCHECKED) ; + + if (hMenu) + { + CheckMenuItem (hMenu, wmId , MF_CHECKED) ; + } + } + + // Parse the menu selections: + switch (wmId) + { + case ID_LOG_APPLICATION: + QueryEventMessages ( + lpComputerName, // Use the local computer. + EVENT_SOURCE_APPLICATION); // The event log category + break; + case ID_LOG_SYSTEM: + QueryEventMessages ( + lpComputerName, // Use the local computer. + EVENT_SOURCE_SYSTEM); // The event log category + break; + case ID_LOG_SECURITY: + QueryEventMessages ( + lpComputerName, // Use the local computer. + EVENT_SOURCE_SECURITY); // The event log category + break; + case IDM_REFRESH: + Refresh (); + break; + case IDM_ABOUT: + DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); + break; + case IDM_HELP: + MessageBox ( + NULL , + _TEXT("Help not implemented yet!") , + _TEXT("Event Log") , + MB_OK | MB_ICONINFORMATION); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + break; + case WM_SIZE: + { + //Gets the window rectangle + GetClientRect(hWnd, &rect); + + //Relocate the listview + MoveWindow( + hwndListView, + 0, + 0, + rect.right, + rect.bottom - 20, + 1); + + // Resize the statusbar; + SendMessage (hwndStatus, message, wParam, lParam); + } + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +// Message handler for about box. +INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_INITDIALOG: + { + return (INT_PTR)TRUE; + } + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + + break; + } + return (INT_PTR)FALSE; +} + +VOID +DisplayEvent (HWND hDlg) +{ + char szEventType[MAX_PATH]; + char szTime[MAX_PATH]; + char szDate[MAX_PATH]; + char szUser[MAX_PATH]; + char szComputer[MAX_PATH]; + char szSource[MAX_PATH]; + char szCategory[MAX_PATH]; + char szEventID[MAX_PATH]; + char szEventText[MAX_PATH*10]; + char szEventData[MAX_PATH]; + BOOL bEventData = FALSE; + LVITEM li; + EVENTLOGRECORD* pevlr; + + // Get index of selected item + int iIndex = (int)SendMessage (hwndListView ,LVM_GETNEXTITEM, -1 , LVNI_SELECTED | LVNI_FOCUSED); + + li.mask = LVIF_PARAM; + li.iItem = iIndex; + li.iSubItem = 0; + + ListView_GetItem(hwndListView, &li); + + pevlr = (EVENTLOGRECORD*)li.lParam; + + 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 , 8 , szEventData , sizeof( szEventData )); + + bEventData = !(strlen(szEventData) == 0); + + GetEventMessage (lpSourceLogName , szSource , pevlr , szEventText); + + 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); + } + else + { + MessageBox( + NULL, + "No Items in ListView", + "Error", + MB_OK | MB_ICONINFORMATION); + } +} + +static +INT_PTR CALLBACK StatusMessageWindowProc( + IN HWND hwndDlg, + IN UINT uMsg, + IN WPARAM wParam, + IN LPARAM lParam) +{ + UNREFERENCED_PARAMETER(wParam); + + switch (uMsg) + { + case WM_INITDIALOG: + { + return TRUE; + } + } + return FALSE; +} + +// Message handler for event details box. +INT_PTR CALLBACK EventDetails(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_INITDIALOG: + { + // Show event info on dialog box + DisplayEvent (hDlg); + return (INT_PTR)TRUE; + } + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + if (LOWORD(wParam) == IDPREVIOUS) + { + SendMessage (hwndListView, WM_KEYDOWN, VK_UP, 0); + + // Show event info on dialog box + DisplayEvent (hDlg); + return (INT_PTR)TRUE; + } + + if (LOWORD(wParam) == IDNEXT) + { + SendMessage (hwndListView, WM_KEYDOWN, VK_DOWN, 0); + + // Show event info on dialog box + DisplayEvent (hDlg); + return (INT_PTR)TRUE; + } + + if (LOWORD(wParam) == IDC_BYTESRADIO) + { + return (INT_PTR)TRUE; + } + + if (LOWORD(wParam) == IDC_WORDRADIO) + { + return (INT_PTR)TRUE; + } + + if (LOWORD(wParam) == IDHELP) + { + MessageBox (NULL , + _TEXT("Help not implemented yet!") , + _TEXT("Event Log") , + MB_OK | MB_ICONINFORMATION); + return (INT_PTR)TRUE; + } + break; + } + return (INT_PTR)FALSE; +}
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.h (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.h Sat Oct 13 14:15:37 2007 @@ -1,0 +1,3 @@ +#pragma once + +#include "resource.h"
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.h ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild Sat Oct 13 14:15:37 2007 @@ -1,0 +1,16 @@ +<?xml version="1.0"?> +<rbuild xmlns:xi="http://www.w3.org/2001/XInclude"> + <module name="eventvwr" type="win32gui" installbase="system32" installname="eventvwr.exe" allowwarnings="true"> + <include base="eventvwr">.</include> + <define name="__REACTOS__" /> + <define name="__USE_W32API" /> + <define name="_WIN32_IE">0x600</define> + <define name="_WIN32_WINNT">0x501</define> + <library>kernel32</library> + <library>user32</library> + <library>comctl32</library> + <library>advapi32</library> + <file>eventvwr.c</file> + <file>eventvwr.rc</file> + </module> +</rbuild>
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rbuild ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rc (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rc Sat Oct 13 14:15:37 2007 @@ -1,0 +1,13 @@ +#include <windows.h> +#include <commctrl.h> +#include "resource.h" + + +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Event Log Viewer\0" +#define REACTOS_STR_INTERNAL_NAME "eventvwr\0" +#define REACTOS_STR_ORIGINAL_FILENAME "eventvwr.exe\0" +#include <reactos/version.rc> + +#include "rsrc.rc" + +
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/eventvwr.rc ------------------------------------------------------------------------------ svn:eol-style = native
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/lang/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Sat Oct 13 14:15:37 2007 @@ -1,0 +1,7 @@ +GNUmakefile +*.vcproj +*.user +*.cbp +*.ncb +*.suo +*.sln
Added: trunk/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc Sat Oct 13 14:15:37 2007 @@ -1,0 +1,211 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_EVENTVWR ICON "res\eventvwr.ico" +IDI_WARNINGICON ICON "res\warning.ico" +IDI_INFORMATIONICON ICON "res\info.ico" +IDI_ERRORICON ICON "res\error.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDC_EVENTVWR MENU +BEGIN + POPUP "&Log" + BEGIN + MENUITEM "&Aplication", ID_LOG_APPLICATION, CHECKED + MENUITEM "&Security", ID_LOG_SECURITY + MENUITEM "&System", ID_LOG_SYSTEM + MENUITEM SEPARATOR + MENUITEM "E&xit", IDM_EXIT + END + POPUP "&View" + BEGIN + MENUITEM "&Refresh", IDM_REFRESH + END + MENUITEM "&Options", ID_OPTIONS + POPUP "&Help" + BEGIN + MENUITEM "H&elp", IDM_HELP + MENUITEM SEPARATOR + MENUITEM "&About ...", IDM_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDC_EVENTVWR ACCELERATORS +BEGIN + "?", IDM_ABOUT, ASCII, ALT + "/", IDM_ABOUT, ASCII, ALT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX 0, 0, 230, 75 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU +CAPTION "About" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_EVENTVWR,IDC_MYICON,14,9,21,20 + LTEXT "ReactOS Event Viewer Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX + LTEXT "Copyright (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,49,20,119,22 + DEFPUSHBUTTON "OK",IDOK,90,48,42,16,WS_GROUP +END + +IDD_PROGRESSBOX DIALOGEX 0, 0, 230, 40 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER +CAPTION "Wait.." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Loading Event Logs. Please wait ...",IDC_STATIC,49,15,119,8,SS_NOPREFIX +END + +IDD_EVENTDETAILDIALOG DIALOGEX 0, 0, 276, 282 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Event Detail" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&Close",IDOK,12,258,50,14 + PUSHBUTTON "&Previous",IDPREVIOUS,78,258,50,14 + PUSHBUTTON "&Next",IDNEXT,144,258,50,14 + PUSHBUTTON "&Help",IDHELP,210,258,50,14 + EDITTEXT IDC_EVENTTEXTEDIT,14,81,247,108,ES_MULTILINE | ES_READONLY + LTEXT "&Description:",IDC_STATIC,15,70,39,8 + LTEXT "Date:",IDC_STATIC,14,14,36,8 + LTEXT "Static",IDC_EVENTDATESTATIC,56,14,72,8 + LTEXT "Time:",IDC_STATIC,14,27,36,8 + LTEXT "Static",IDC_EVENTTIMESTATIC,56,27,72,8 + LTEXT "&User:",IDC_STATIC,14,41,36,8 + LTEXT "Static",IDC_EVENTUSERSTATIC,56,41,72,8 + LTEXT "&Computer:",IDC_STATIC,14,54,36,8 + LTEXT "Static",IDC_EVENTCOMPUTERSTATIC,56,54,72,8 + LTEXT "EventID :",IDC_STATIC,133,15,36,8 + LTEXT "Static",IDC_EVENTIDSTATIC,175,15,87,8 + LTEXT "Source:",IDC_STATIC,133,28,36,8 + LTEXT "Static",IDC_EVENTSOURCESTATIC,175,28,87,8 + LTEXT "Type:",IDC_STATIC,133,42,36,8 + LTEXT "Static",IDC_EVENTTYPESTATIC,175,42,87,8 + LTEXT "Category:",IDC_STATIC,133,55,36,8 + LTEXT "Static",IDC_EVENTCATEGORYSTATIC,175,55,87,8 + EDITTEXT IDC_EVENTDATAEDIT,14,204,247,44,ES_MULTILINE | ES_READONLY + LTEXT "D&ata",IDC_STATIC,14,194,16,8 + CONTROL "&Bytes",IDC_BYTESRADIO,"Button",BS_AUTORADIOBUTTON,39,194,34,10 + CONTROL "&Word",IDC_WORDRADIO,"Button",BS_AUTORADIOBUTTON,77,194,33,10 +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_EVENTDETAILDIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 269 + TOPMARGIN, 7 + BOTTOMMARGIN, 275 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_APP_TITLE "Event Viewer" + IDC_EVENTVWR "EVENTVWR" + IDC_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer." +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED +
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc ------------------------------------------------------------------------------ svn:eol-style = native
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/res/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Sat Oct 13 14:15:37 2007 @@ -1,0 +1,7 @@ +GNUmakefile +*.vcproj +*.user +*.cbp +*.ncb +*.suo +*.sln
Added: trunk/reactos/base/applications/mscutils/eventvwr/res/error.ico URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== Binary file - no diff available.
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/res/error.ico ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/mscutils/eventvwr/res/eventvwr.ico URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== Binary file - no diff available.
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/res/eventvwr.ico ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/mscutils/eventvwr/res/info.ico URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== Binary file - no diff available.
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/res/info.ico ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/mscutils/eventvwr/res/warning.ico URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== Binary file - no diff available.
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/res/warning.ico ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/mscutils/eventvwr/resource.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/eventvwr/resource.h (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/resource.h Sat Oct 13 14:15:37 2007 @@ -1,0 +1,62 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by eventvwr.rc +// +#define IDC_MYICON 2 +#define IDNEXT 3 +#define IDHELP 4 +#define IDD_EVENTVWR_DIALOG 102 +#define IDD_PROGRESSBOX 150 +#define IDS_APP_TITLE 103 +#define IDD_ABOUTBOX 103 +#define IDM_ABOUT 104 +#define IDM_EXIT 105 +#define IDI_EVENTVWR 107 +#define IDI_SMALL 108 +#define IDC_EVENTVWR 109 +#define IDC_EVENTSTRINGIDNOTFOUND 209 +#define IDC_PROCESSPROGRESS 250 +#define IDR_MAINFRAME 128 +#define IDI_WARNINGICON 129 +#define IDI_INFORMATIONICON 130 +#define IDI_ERRORICON 131 +#define IDD_EVENTDETAILDIALOG 132 +#define IDC_EVENTTEXTEDIT 1000 +#define IDC_EVENTDATESTATIC 1001 +#define IDC_EVENTTIMESTATIC 1002 +#define IDC_EVENTUSERSTATIC 1003 +#define IDC_EVENTCOMPUTERSTATIC 1004 +#define IDC_EVENTIDSTATIC 1005 +#define IDC_EVENTSOURCESTATIC 1006 +#define IDC_EVENTTYPESTATIC 1007 +#define IDC_EVENTCATEGORYSTATIC 1008 +#define IDPREVIOUS 1009 +#define IDC_EVENTTEXTEDIT2 1010 +#define IDC_BYTESRADIO 1011 +#define IDC_WORDRADIO 1013 +#define IDC_EVENTDATAEDIT 1014 +#define ID_LOG_APLICATION 32771 +#define ID_LOG_SECURITY 32772 +#define ID_LOG_SYSTEM 32773 +#define ID_LOG_APPLICATION 32774 +#define ID_HELP_HELP 32775 +#define ID_HELP 32776 +#define ID_OPTIONS 32777 +#define ID_VIEW 32778 +#define IDM_HELP 32779 +#define ID_VIEW_REFRESH 32780 +#define ID_REFRESH 32781 +#define IDM_REFRESH 32782 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 133 +#define _APS_NEXT_COMMAND_VALUE 32783 +#define _APS_NEXT_CONTROL_VALUE 1012 +#define _APS_NEXT_SYMED_VALUE 110 +#endif +#endif
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/resource.h ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils/... ============================================================================== --- trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc (added) +++ trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc Sat Oct 13 14:15:37 2007 @@ -1,0 +1,6 @@ +#include <windows.h> +#include "resource.h" + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +#include "lang/en-US.rc"
Propchange: trunk/reactos/base/applications/mscutils/eventvwr/rsrc.rc ------------------------------------------------------------------------------ svn:eol-style = native