[HEADERS]
[reactos.git] / rosapps / applications / sysutils / logevent / logevent.c
1 /*
2 * ReactOS Win32 Applications
3 * Copyright (C) 2007 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19 /* $Id: hostname.c 21664 2006-04-19 20:14:03Z gedmurphy $
20 *
21 * COPYRIGHT : See COPYING in the top level directory
22 * PROJECT : Event Logging Utility
23 * FILE : logevent.c
24 * PROGRAMMER: Marc Piulachs (marc.piulachs at codexchange [dot] net)
25 */
26
27 #include <windows.h>
28 #include <stdlib.h>
29 #include <stdio.h>
30 #include <string.h>
31 #include <malloc.h>
32 #include <tchar.h>
33 #include <stdarg.h>
34
35 TCHAR* m_MachineName = NULL;
36 TCHAR* m_Text = "No User Event Text";
37 TCHAR* m_Source = "User Event";
38 WORD m_Severity = EVENTLOG_INFORMATION_TYPE;
39 WORD m_Category = 0;
40 DWORD m_EventID = 1;
41
42 void
43 Usage(VOID)
44 {
45 fputs("Usage: logevent.exe [-m \\MachineName] [options] \"Event Text\"", stderr);
46 fputs("\n\n", stderr);
47 fputs("Options:\n", stderr);
48 fputs(" -s Severity one of:\n", stderr);
49 fputs(" \t(S)uccess\n", stderr);
50 fputs(" \t(I)nformation\n", stderr);
51 fputs(" \t(W)arning\n", stderr);
52 fputs(" \t(E)rror\n", stderr);
53 fputs(" \t(F)ailure\n", stderr);
54 fputs(" -r Source\n", stderr);
55 fputs(" -c Category number\n", stderr);
56 fputs(" -e Event ID\n", stderr);
57 fputs(" /? Help\n", stderr);
58 }
59
60 void
61 WriteEvent (VOID)
62 {
63 HANDLE hAppLog;
64 BOOL bSuccess;
65 LPCTSTR arrLogEntry[] = { m_Text }; //writing just one entry
66
67 /* Get a handle to the Application event log */
68 hAppLog = RegisterEventSource(
69 (LPCSTR)m_MachineName, /* machine */
70 (LPCSTR)m_Source); /* source name */
71
72 /* Now report the event, which will add this event to the event log */
73 bSuccess = ReportEvent(
74 hAppLog, /* event-log handle */
75 m_Severity, /* event type */
76 m_Category, /* category */
77 m_EventID, /* event ID */
78 NULL, /* no user SID */
79 1, /* number of substitution strings */
80 0, /* no binary data */
81 arrLogEntry, /* string array */
82 NULL); /* address of data */
83
84 DeregisterEventSource(hAppLog);
85
86 return;
87 }
88
89 /* Parse command line parameters */
90 static BOOL ParseCmdline(int argc, TCHAR **argv)
91 {
92 INT i;
93 BOOL ShowUsage;
94 BOOL FoundEventText;
95 BOOL InvalidOption;
96
97 if (argc < 2) {
98 ShowUsage = TRUE;
99 } else {
100 ShowUsage = FALSE;
101 }
102
103 FoundEventText = FALSE;
104 InvalidOption = FALSE;
105
106 for (i = 1; i < argc; i++) {
107 if (argv[i][0] == '-' || argv[i][0] == '/') {
108 switch (argv[i][1]) {
109 case 's':
110 case 'S':
111 switch (argv[i + 1][0])
112 {
113 case 's':
114 case 'S':
115 m_Severity = EVENTLOG_SUCCESS;
116 i++;
117 break;
118 case 'i':
119 case 'I':
120 m_Severity = EVENTLOG_INFORMATION_TYPE;
121 i++;
122 break;
123 case 'w':
124 case 'W':
125 m_Severity = EVENTLOG_WARNING_TYPE;
126 i++;
127 break;
128 case 'e':
129 case 'E':
130 m_Severity = EVENTLOG_ERROR_TYPE;
131 i++;
132 break;
133 case 'f':
134 case 'F':
135 m_Severity = EVENTLOG_ERROR_TYPE;
136 i++;
137 break;
138 default:
139 printf("Bad option %s.\n", argv[i]);
140 Usage();
141 return FALSE;
142 }
143 break;
144 case 'm':
145 case 'M':
146 m_MachineName = argv[i + 1];
147 i++;
148 break;
149 case 'r':
150 case 'R':
151 m_Source = argv[i + 1];
152 i++;
153 break;
154 case 'c':
155 case 'C':
156 m_Category = atoi(argv[i + 1]);
157 i++;
158 break;
159 case 'e':
160 case 'E':
161 m_EventID = atoi(argv[i + 1]);
162 i++;
163 break;
164 case '?':
165 ShowUsage = TRUE;
166 break;
167 default:
168 printf("Bad option %s.\n", argv[i]);
169 Usage();
170 return FALSE;
171 }
172 if (InvalidOption) {
173 printf("Bad option format %s.\n", argv[i]);
174 return FALSE;
175 }
176 } else {
177 if (FoundEventText) {
178 printf("Bad parameter %s.\n", argv[i]);
179 return FALSE;
180 } else {
181 m_Text = argv[i];
182 FoundEventText = TRUE;
183 }
184 }
185 }
186
187 if ((!ShowUsage) && (!FoundEventText)) {
188 printf("The event text must be specified.\n");
189 return FALSE;
190 }
191
192 if (ShowUsage) {
193 Usage();
194 return FALSE;
195 }
196
197 return TRUE;
198 }
199
200 int main(int argc, char **argv)
201 {
202 if (ParseCmdline(argc, argv))
203 WriteEvent ();
204
205 return 0;
206 }