mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
Add a "logevent" utility for adding an event to the EventLog, developed by Marc Piulachs (marc DOT piulachs AT codexchange DOT net)
See issue #2598 for more details. svn path=/trunk/; revision=28935
This commit is contained in:
parent
30dc779d1c
commit
a1a8df5ad2
4 changed files with 200 additions and 0 deletions
|
@ -49,6 +49,10 @@
|
|||
</directory>
|
||||
-->
|
||||
|
||||
<directory name="logevent">
|
||||
<xi:include href="logevent/logevent.rbuild" />
|
||||
</directory>
|
||||
|
||||
<directory name="magnify">
|
||||
<xi:include href="magnify/magnify.rbuild" />
|
||||
</directory>
|
||||
|
|
182
rosapps/logevent/logevent.c
Normal file
182
rosapps/logevent/logevent.c
Normal file
|
@ -0,0 +1,182 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
/* $Id: hostname.c 21664 2006-04-19 20:14:03Z gedmurphy $
|
||||
*
|
||||
* COPYRIGHT : See COPYING in the top level directory
|
||||
* PROJECT : Event Logging Utility
|
||||
* FILE : logevent.c
|
||||
* PROGRAMMER: Marc Piulachs (marc.piulachs at codexchange [dot] net)
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <malloc.h>
|
||||
#include <tchar.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
TCHAR* m_MachineName = NULL;
|
||||
TCHAR* m_Text = "No User Event Text";
|
||||
TCHAR* m_Source = "User Event";
|
||||
WORD m_Severity = EVENTLOG_INFORMATION_TYPE;
|
||||
WORD m_Category = 0;
|
||||
DWORD m_EventID = 1;
|
||||
|
||||
void
|
||||
Usage(VOID)
|
||||
{
|
||||
fputs("logevent.exe [-m \\MachineName] [options] \"Event Text\"", stderr);
|
||||
fputs("\n", stderr);
|
||||
fputs(" Options:\n", stderr);
|
||||
fputs(" -s Severity one of :\n", stderr);
|
||||
fputs(" (S)uccess\n", stderr);
|
||||
fputs(" (I)nformation\n", stderr);
|
||||
fputs(" (W)arning\n", stderr);
|
||||
fputs(" (E)rror\n", stderr);
|
||||
fputs(" (F)ailure\n", stderr);
|
||||
fputs(" -r Source\n", stderr);
|
||||
fputs(" -c Category number\n", stderr);
|
||||
fputs(" -e Event ID\n", stderr);
|
||||
fputs(" /? Help\n", stderr);
|
||||
}
|
||||
|
||||
void
|
||||
WriteEvent (VOID)
|
||||
{
|
||||
HANDLE hAppLog;
|
||||
BOOL bSuccess;
|
||||
LPCTSTR arrLogEntry[] = { m_Text }; //writing just one entry
|
||||
|
||||
/* Get a handle to the Application event log */
|
||||
hAppLog = RegisterEventSource(
|
||||
(LPCSTR)m_MachineName, /* machine */
|
||||
(LPCSTR)m_Source); /* source name */
|
||||
|
||||
/* Now report the event, which will add this event to the event log */
|
||||
bSuccess = ReportEvent(
|
||||
hAppLog, /* event-log handle */
|
||||
m_Severity, /* event type */
|
||||
m_Category, /* category */
|
||||
m_EventID, /* event ID */
|
||||
NULL, /* no user SID */
|
||||
1, /* number of substitution strings */
|
||||
0, /* no binary data */
|
||||
arrLogEntry, /* string array */
|
||||
NULL); /* address of data */
|
||||
|
||||
DeregisterEventSource(hAppLog);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Parse command line parameters */
|
||||
static BOOL ParseCmdline(int argc, TCHAR **argv)
|
||||
{
|
||||
INT i;
|
||||
BOOL ShowUsage;
|
||||
BOOL FoundEventText;
|
||||
BOOL InvalidOption;
|
||||
|
||||
if (argc < 2) {
|
||||
ShowUsage = TRUE;
|
||||
} else {
|
||||
ShowUsage = FALSE;
|
||||
}
|
||||
|
||||
FoundEventText = FALSE;
|
||||
InvalidOption = FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (argv[i][0] == '-' || argv[i][0] == '/') {
|
||||
switch (argv[i][1]) {
|
||||
case 's':
|
||||
switch (argv[i + 1][0])
|
||||
{
|
||||
case 's':
|
||||
m_Severity = EVENTLOG_SUCCESS;
|
||||
i++;
|
||||
break;
|
||||
case 'i':
|
||||
m_Severity = EVENTLOG_INFORMATION_TYPE;
|
||||
i++;
|
||||
break;
|
||||
case 'w':
|
||||
m_Severity = EVENTLOG_WARNING_TYPE;
|
||||
i++;
|
||||
break;
|
||||
case 'e':
|
||||
m_Severity = EVENTLOG_ERROR_TYPE;
|
||||
i++;
|
||||
break;
|
||||
case 'f':
|
||||
m_Severity = EVENTLOG_ERROR_TYPE;
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
printf("Bad option %s.\n", argv[i]);
|
||||
Usage();
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case 'm': m_MachineName = argv[i + 1]; i++; break;
|
||||
case 'r': m_Source = argv[i + 1]; i++; break;
|
||||
case 'c': m_Category = atoi(argv[i + 1]); i++; break;
|
||||
case 'e': m_EventID = atoi(argv[i + 1]); i++; break;
|
||||
case 'h': ShowUsage = TRUE; break;
|
||||
default:
|
||||
printf("Bad option %s.\n", argv[i]);
|
||||
Usage();
|
||||
return FALSE;
|
||||
}
|
||||
if (InvalidOption) {
|
||||
printf("Bad option format %s.\n", argv[i]);
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
if (FoundEventText) {
|
||||
printf("Bad parameter %s.\n", argv[i]);
|
||||
return FALSE;
|
||||
} else {
|
||||
m_Text = argv[i];
|
||||
FoundEventText = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((!ShowUsage) && (!FoundEventText)) {
|
||||
printf("The event text must be specified.\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (ShowUsage) {
|
||||
Usage();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (ParseCmdline(argc, argv))
|
||||
WriteEvent ();
|
||||
|
||||
return 0;
|
||||
}
|
9
rosapps/logevent/logevent.rbuild
Normal file
9
rosapps/logevent/logevent.rbuild
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<module name="logevent" type="win32cui" installbase="system32" installname="logevent.exe" allowwarnings="true">
|
||||
<define name="__USE_W32API" />
|
||||
<library>kernel32</library>
|
||||
<library>advapi32</library>
|
||||
<file>logevent.c</file>
|
||||
<file>logevent.rc</file>
|
||||
</module>
|
5
rosapps/logevent/logevent.rc
Normal file
5
rosapps/logevent/logevent.rc
Normal file
|
@ -0,0 +1,5 @@
|
|||
#define REACTOS_STR_FILE_DESCRIPTION "Win32 logevent utility\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "logevent\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "logevent.exe\0"
|
||||
|
||||
#include <reactos/version.rc>
|
Loading…
Reference in a new issue