[EVENTVWR]

Do not hardcode event logs, but retrieve them from the registry.
Patch by Ricardo Hanke.

CORE-8458 #resolve #comment Committed, thanks!

svn path=/trunk/; revision=63930
This commit is contained in:
Hermès Bélusca-Maïto 2014-08-24 12:00:57 +00:00
parent ac9576edbf
commit e2bb0affc7
24 changed files with 218 additions and 181 deletions

View file

@ -41,12 +41,10 @@
#define _CRT_SECURE_NO_DEPRECATE /* all deprecated unsafe string functions */
#endif
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*/
static const WCHAR EVENTLOG_BASE_KEY[] = L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\";
//MessageFile message buffer size
// MessageFile message buffer size
#define EVENT_MESSAGE_EVENTTEXT_BUFFER 1024*10
#define EVENT_MESSAGE_FILE_BUFFER 1024*10
#define EVENT_DLL_SEPARATOR L";"
@ -73,6 +71,9 @@ OPENFILENAMEW sfn;
LPWSTR lpSourceLogName = NULL;
LPWSTR lpComputerName = NULL;
DWORD dwNumLogs = 0;
WCHAR **LogNames;
/* Forward declarations of functions included in this code module: */
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
@ -838,19 +839,6 @@ Refresh(VOID)
}
//
// 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)
{
@ -874,16 +862,188 @@ MyRegisterClass(HINSTANCE hInstance)
}
//
// 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.
//
VOID
GetDisplayNameFile(LPCWSTR lpLogName, LPWSTR lpModuleName)
{
HKEY hKey;
WCHAR *KeyPath;
WCHAR szModuleName[MAX_PATH];
DWORD dwData;
KeyPath = (WCHAR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(EVENTLOG_BASE_KEY) + wcslen(lpLogName) + 1) * sizeof(WCHAR));
if (!KeyPath)
{
return;
}
wcscpy(KeyPath, EVENTLOG_BASE_KEY);
wcscat(KeyPath, lpLogName);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, KeyPath);
return;
}
dwData = MAX_PATH;
if (RegQueryValueExW(hKey, L"DisplayNameFile", NULL, NULL, (LPBYTE)szModuleName, &dwData) == ERROR_SUCCESS)
{
ExpandEnvironmentStringsW(szModuleName, lpModuleName, MAX_PATH);
}
RegCloseKey(hKey);
HeapFree(GetProcessHeap(), 0, KeyPath);
}
DWORD
GetDisplayNameID(LPCWSTR lpLogName)
{
HKEY hKey;
WCHAR *KeyPath;
DWORD dwMessageID = 0;
DWORD dwData;
KeyPath = (WCHAR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (wcslen(EVENTLOG_BASE_KEY) + wcslen(lpLogName) + 1) * sizeof(WCHAR));
if (!KeyPath)
{
return 0;
}
wcscpy(KeyPath, EVENTLOG_BASE_KEY);
wcscat(KeyPath, lpLogName);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, KeyPath);
return 0;
}
dwData = sizeof(dwMessageID);
RegQueryValueExW(hKey, L"DisplayNameID", NULL, NULL, (LPBYTE)&dwMessageID, &dwData);
RegCloseKey(hKey);
HeapFree(GetProcessHeap(), 0, KeyPath);
return dwMessageID;
}
VOID
BuildLogList(void)
{
HKEY hKey;
DWORD lpcName;
DWORD dwIndex;
DWORD dwMessageID;
DWORD dwMaxKeyLength;
WCHAR szModuleName[MAX_PATH];
LPWSTR lpDisplayName;
HANDLE hLibrary = NULL;
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, EVENTLOG_BASE_KEY, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
return;
}
if (RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &dwNumLogs, &dwMaxKeyLength, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return;
}
if (!dwNumLogs)
{
RegCloseKey(hKey);
return;
}
LogNames = (WCHAR**)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (dwNumLogs + 1) * sizeof(WCHAR*));
if (!LogNames)
{
RegCloseKey(hKey);
return;
}
for (dwIndex = 0; dwIndex < dwNumLogs; dwIndex++)
{
LogNames[dwIndex] = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ((dwMaxKeyLength + 1) * sizeof(WCHAR)));
if (LogNames[dwIndex] != NULL)
{
lpcName = dwMaxKeyLength + 1;
if (RegEnumKeyExW(hKey, dwIndex, LogNames[dwIndex], &lpcName, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
lpDisplayName = NULL;
ZeroMemory(szModuleName, sizeof(szModuleName));
GetDisplayNameFile(LogNames[dwIndex], szModuleName);
dwMessageID = GetDisplayNameID(LogNames[dwIndex]);
hLibrary = LoadLibraryExW(szModuleName, NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE);
if (hLibrary != NULL)
{
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE, hLibrary, dwMessageID, 0, (LPWSTR)&lpDisplayName, 0, NULL);
FreeLibrary(hLibrary);
}
if (lpDisplayName)
{
InsertMenuW(hMainMenu, ID_SAVE_PROTOCOL, MF_BYCOMMAND | MF_STRING, ID_FIRST_LOG + dwIndex, lpDisplayName);
}
else
{
InsertMenuW(hMainMenu, ID_SAVE_PROTOCOL, MF_BYCOMMAND | MF_STRING, ID_FIRST_LOG + dwIndex, LogNames[dwIndex]);
}
LocalFree(lpDisplayName);
}
}
}
InsertMenuW(hMainMenu, ID_SAVE_PROTOCOL, MF_BYCOMMAND | MF_SEPARATOR, ID_FIRST_LOG + dwIndex + 1, NULL);
RegCloseKey(hKey);
return;
}
VOID
FreeLogList(void)
{
DWORD dwIndex;
if (!LogNames)
{
return;
}
for (dwIndex = 0; dwIndex < dwNumLogs; dwIndex++)
{
if (LogNames[dwIndex])
{
HeapFree(GetProcessHeap(), 0, LogNames[dwIndex]);
}
DeleteMenu(hMainMenu, ID_FIRST_LOG + dwIndex, MF_BYCOMMAND);
}
DeleteMenu(hMainMenu, ID_FIRST_LOG + dwIndex + 1, MF_BYCOMMAND);
HeapFree(GetProcessHeap(), 0, LogNames);
dwNumLogs = 0;
return;
}
BOOL
InitInstance(HINSTANCE hInstance,
int nCmdShow)
@ -1042,23 +1202,16 @@ InitInstance(HINSTANCE hInstance,
ShowWindow(hwndMainWindow, nCmdShow);
UpdateWindow(hwndMainWindow);
QueryEventMessages(lpComputerName, // Use the local computer.
EVENT_SOURCE_APPLICATION); // The event log category
BuildLogList();
QueryEventMessages(lpComputerName, LogNames[0]);
CheckMenuRadioItem(GetMenu(hwndMainWindow), ID_FIRST_LOG, ID_FIRST_LOG + dwNumLogs, ID_FIRST_LOG, MF_BYCOMMAND);
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)
{
@ -1069,11 +1222,6 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_CREATE:
hMainMenu = GetMenu(hWnd);
CheckMenuRadioItem(GetMenu(hWnd),
ID_LOG_APPLICATION,
ID_LOG_SYSTEM,
ID_LOG_APPLICATION,
MF_BYCOMMAND);
break;
case WM_NOTIFY:
@ -1099,44 +1247,21 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_COMMAND:
// Parse the menu selections:
if ((LOWORD(wParam) >= ID_FIRST_LOG) && (LOWORD(wParam) <= ID_FIRST_LOG + dwNumLogs))
{
if (LogNames[LOWORD(wParam) - ID_FIRST_LOG])
{
if (QueryEventMessages(lpComputerName, LogNames[LOWORD(wParam) - ID_FIRST_LOG]))
{
CheckMenuRadioItem(GetMenu(hWnd), ID_FIRST_LOG, ID_FIRST_LOG + dwNumLogs, LOWORD(wParam), MF_BYCOMMAND);
}
}
}
else
switch (LOWORD(wParam))
{
case ID_LOG_APPLICATION:
if (QueryEventMessages(lpComputerName, // Use the local computer.
EVENT_SOURCE_APPLICATION)) // The event log category
{
CheckMenuRadioItem(GetMenu(hWnd),
ID_LOG_APPLICATION,
ID_LOG_SYSTEM,
ID_LOG_APPLICATION,
MF_BYCOMMAND);
}
break;
case ID_LOG_SECURITY:
if (QueryEventMessages(lpComputerName, // Use the local computer.
EVENT_SOURCE_SECURITY)) // The event log category
{
CheckMenuRadioItem(GetMenu(hWnd),
ID_LOG_APPLICATION,
ID_LOG_SYSTEM,
ID_LOG_SECURITY,
MF_BYCOMMAND);
}
break;
case ID_LOG_SYSTEM:
if (QueryEventMessages(lpComputerName, // Use the local computer.
EVENT_SOURCE_SYSTEM)) // The event log category
{
CheckMenuRadioItem(GetMenu(hWnd),
ID_LOG_APPLICATION,
ID_LOG_SYSTEM,
ID_LOG_SYSTEM,
MF_BYCOMMAND);
}
break;
case ID_SAVE_PROTOCOL:
SaveProtocol();
break;
@ -1191,6 +1316,7 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
break;
case WM_DESTROY:
FreeRecords();
FreeLogList();
PostQuitMessage(0);
break;

View file

@ -4,10 +4,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Дневник"
BEGIN
MENUITEM "&Приложение", ID_LOG_APPLICATION
MENUITEM "&Сигурност", ID_LOG_SECURITY
MENUITEM "&Уредба", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -4,10 +4,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Protokol"
BEGIN
MENUITEM "&Aplikace", ID_LOG_APPLICATION
MENUITEM "&Zabezpečení", ID_LOG_SECURITY
MENUITEM "&Systém", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Uložit &Protokol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Odstranit události", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Protokoll"
BEGIN
MENUITEM "&Anwendung", ID_LOG_APPLICATION
MENUITEM "&Sicherheit", ID_LOG_SECURITY
MENUITEM "&System", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Protokoll s&peichern...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "Alle E&reignisse löschen", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Log"
BEGIN
MENUITEM "&Εφαρμογή", ID_LOG_APPLICATION
MENUITEM "&Ασφάλεια", ID_LOG_SECURITY
MENUITEM "&Σύστημα", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -12,10 +12,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Log"
BEGIN
MENUITEM "&Application", ID_LOG_APPLICATION
MENUITEM "&Security", ID_LOG_SECURITY
MENUITEM "&System", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Log"
BEGIN
MENUITEM "&Aplicación", ID_LOG_APPLICATION
MENUITEM "&Seguridad", ID_LOG_SECURITY
MENUITEM "&Sistema", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "Journa&l"
BEGIN
MENUITEM "&Application", ID_LOG_APPLICATION
MENUITEM "&Sécurité", ID_LOG_SECURITY
MENUITEM "&Système", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "Effacer tous &les événements", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "מציג האירועים (מקומי)"
BEGIN
MENUITEM "יישום", ID_LOG_APPLICATION
MENUITEM "אבטחה", ID_LOG_SECURITY
MENUITEM "מערכת", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Log"
BEGIN
MENUITEM "&Applicazioni", ID_LOG_APPLICATION
MENUITEM "&Sicurezza", ID_LOG_SECURITY
MENUITEM "&Sistema", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "ログ(&L)"
BEGIN
MENUITEM "アプリケーション(&A)", ID_LOG_APPLICATION
MENUITEM "セキュリティ(&S)", ID_LOG_SECURITY
MENUITEM "システム(&S)", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "로그(&L)"
BEGIN
MENUITEM "애플리케이션(&A)", ID_LOG_APPLICATION
MENUITEM "보안(&S)", ID_LOG_SECURITY
MENUITEM "시스템(&S)", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -4,10 +4,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Logg"
BEGIN
MENUITEM "&Applikasjon", ID_LOG_APPLICATION
MENUITEM "&Sikkerhet", ID_LOG_SECURITY
MENUITEM "&System", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -8,10 +8,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Logi"
BEGIN
MENUITEM "&Aplikacja", ID_LOG_APPLICATION
MENUITEM "&Zabezpieczenia", ID_LOG_SECURITY
MENUITEM "&System", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Zapisz &protokół...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "W&yczyść wszystkie zdarzenia", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Registro"
BEGIN
MENUITEM "&Aplicativo", ID_LOG_APPLICATION
MENUITEM "S&egurança", ID_LOG_SECURITY
MENUITEM "&Sistema", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "J&urnal"
BEGIN
MENUITEM "&Aplicație", ID_LOG_APPLICATION
MENUITEM "Se&curitate", ID_LOG_SECURITY
MENUITEM "&Sistem", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Păstrare p&rotocol…", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "Înlăt&ură toate evenimentele", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Логи"
BEGIN
MENUITEM "&Приложений", ID_LOG_APPLICATION
MENUITEM "&Безопасности", ID_LOG_SECURITY
MENUITEM "&Системы", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -9,10 +9,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Záznam"
BEGIN
MENUITEM "&Application", ID_LOG_APPLICATION
MENUITEM "&Security", ID_LOG_SECURITY
MENUITEM "&System", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -12,10 +12,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Log"
BEGIN
MENUITEM "&Aplikacion", ID_LOG_APPLICATION
MENUITEM "&Siguri", ID_LOG_SECURITY
MENUITEM "&Sistemi", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Logg"
BEGIN
MENUITEM "&Applikation", ID_LOG_APPLICATION
MENUITEM "&Säkerhet", ID_LOG_SECURITY
MENUITEM "&System", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -12,10 +12,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Kayıt"
BEGIN
MENUITEM "&Uygulama", ID_LOG_APPLICATION
MENUITEM "&Güvenlik", ID_LOG_SECURITY
MENUITEM "&Dizge", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "&Protokolü Kaydet...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Tüm Olayları Sil", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "&Звіт"
BEGIN
MENUITEM "&Програма", ID_LOG_APPLICATION
MENUITEM "&Захист", ID_LOG_SECURITY
MENUITEM "&Система", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -6,10 +6,6 @@ IDC_EVENTVWR MENU
BEGIN
POPUP "日志(&L)"
BEGIN
MENUITEM "应用程序日志(&A)", ID_LOG_APPLICATION
MENUITEM "安全日志(&S)", ID_LOG_SECURITY
MENUITEM "系统日志(&Y)", ID_LOG_SYSTEM
MENUITEM SEPARATOR
MENUITEM "Save &Protocol...", ID_SAVE_PROTOCOL, GRAYED
MENUITEM SEPARATOR
MENUITEM "C&lear all Events", ID_CLEAR_EVENTS, GRAYED

View file

@ -35,19 +35,18 @@
#define IDC_WORDRADIO 1013
#define IDC_EVENTDATAEDIT 1014
#define ID_LOG_APPLICATION 32771
#define ID_LOG_SECURITY 32772
#define ID_LOG_SYSTEM 32773
#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 ID_CLEAR_EVENTS 32783
#define ID_SAVE_PROTOCOL 32784
#define ID_HELP_HELP 32771
#define ID_HELP 32772
#define ID_OPTIONS 32773
#define ID_VIEW 32774
#define IDM_HELP 32775
#define ID_VIEW_REFRESH 32776
#define ID_REFRESH 32777
#define IDM_REFRESH 32778
#define ID_CLEAR_EVENTS 32779
#define ID_SAVE_PROTOCOL 32780
#define ID_FIRST_LOG 45000
/* String IDs */
#define IDS_APP_TITLE 103