EVENTLOG:
[reactos.git] / reactos / base / services / eventlog / rpc.c
1 /*
2 * PROJECT: ReactOS kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: services/eventlog/rpc.c
5 * PURPOSE: Event logging service
6 * COPYRIGHT: Copyright 2005 Saveliy Tretiakov
7 */
8
9 /* INCLUDES *****************************************************************/
10
11 #include "eventlog.h"
12
13 /* FUNCTIONS ****************************************************************/
14
15 DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter)
16 {
17 RPC_STATUS Status;
18
19 Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\EventLog", NULL);
20 if (Status != RPC_S_OK)
21 {
22 DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
23 return 0;
24 }
25
26 Status = RpcServerRegisterIf(eventlog_v0_0_s_ifspec, NULL, NULL);
27
28 if (Status != RPC_S_OK)
29 {
30 DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status);
31 return 0;
32 }
33
34 Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE);
35
36 if (Status != RPC_S_OK)
37 {
38 DPRINT("RpcServerListen() failed (Status %lx)\n", Status);
39 }
40
41 return 0;
42 }
43
44
45 /* Function 0 */
46 NTSTATUS ElfrClearELFW(
47 IELF_HANDLE LogHandle,
48 PRPC_UNICODE_STRING BackupFileName)
49 {
50 UNIMPLEMENTED;
51 return STATUS_NOT_IMPLEMENTED;
52 }
53
54
55 /* Function 1 */
56 NTSTATUS ElfrBackupELFW(
57 IELF_HANDLE LogHandle,
58 PRPC_UNICODE_STRING BackupFileName)
59 {
60 UNIMPLEMENTED;
61 return STATUS_NOT_IMPLEMENTED;
62 }
63
64
65 /* Function 2 */
66 NTSTATUS ElfrCloseEL(
67 IELF_HANDLE *LogHandle)
68 {
69 UNIMPLEMENTED;
70 return STATUS_NOT_IMPLEMENTED;
71 }
72
73
74 /* Function 3 */
75 NTSTATUS ElfrDeregisterEventSource(
76 IELF_HANDLE *LogHandle)
77 {
78 UNIMPLEMENTED;
79 return STATUS_SUCCESS;
80 }
81
82
83 /* Function 4 */
84 NTSTATUS ElfrNumberOfRecords(
85 IELF_HANDLE LogHandle,
86 DWORD *NumberOfRecords)
87 {
88 UNIMPLEMENTED;
89 return STATUS_NOT_IMPLEMENTED;
90 }
91
92
93 /* Function 5 */
94 NTSTATUS ElfrOldestRecord(
95 IELF_HANDLE LogHandle,
96 DWORD *OldestRecordNumber)
97 {
98 UNIMPLEMENTED;
99 return STATUS_NOT_IMPLEMENTED;
100 }
101
102
103 /* Function 6 */
104 NTSTATUS ElfrChangeNotify(
105 IELF_HANDLE *LogHandle,
106 RPC_CLIENT_ID ClientId,
107 DWORD Event)
108 {
109 UNIMPLEMENTED;
110 return STATUS_NOT_IMPLEMENTED;
111 }
112
113
114 /* Function 7 */
115 NTSTATUS ElfrOpenELW(
116 EVENTLOG_HANDLE_W UNCServerName,
117 PRPC_UNICODE_STRING ModuleName,
118 PRPC_UNICODE_STRING RegModuleName,
119 DWORD MajorVersion,
120 DWORD MinorVersion,
121 IELF_HANDLE *LogHandle)
122 {
123 UNIMPLEMENTED;
124 *LogHandle = (IELF_HANDLE)1;
125 return STATUS_SUCCESS;
126 }
127
128
129 /* Function 8 */
130 NTSTATUS ElfrRegisterEventSourceW(
131 EVENTLOG_HANDLE_W UNCServerName,
132 PRPC_UNICODE_STRING ModuleName,
133 PRPC_UNICODE_STRING RegModuleName,
134 DWORD MajorVersion,
135 DWORD MinorVersion,
136 IELF_HANDLE *LogHandle)
137 {
138 UNIMPLEMENTED;
139 *LogHandle = (IELF_HANDLE)1;
140 return STATUS_SUCCESS;
141 }
142
143
144 /* Function 9 */
145 NTSTATUS ElfrOpenBELW(
146 EVENTLOG_HANDLE_W UNCServerName,
147 PRPC_UNICODE_STRING BackupFileName,
148 DWORD MajorVersion,
149 DWORD MinorVersion,
150 IELF_HANDLE *LogHandle)
151 {
152 UNIMPLEMENTED;
153 return STATUS_NOT_IMPLEMENTED;
154 }
155
156
157 /* Function 10 */
158 NTSTATUS ElfrReadELW(
159 IELF_HANDLE LogHandle,
160 DWORD ReadFlags,
161 DWORD RecordOffset,
162 RULONG NumberOfBytesToRead,
163 BYTE *Buffer,
164 DWORD *NumberOfBytesRead,
165 DWORD *MinNumberOfBytesNeeded)
166 {
167 UNIMPLEMENTED;
168 return STATUS_NOT_IMPLEMENTED;
169 }
170
171
172 /* Function 11 */
173 NTSTATUS ElfrReportEventW(
174 IELF_HANDLE LogHandle,
175 DWORD Time,
176 USHORT EventType,
177 USHORT EventCategory,
178 DWORD EventID,
179 USHORT NumStrings,
180 DWORD DataSize,
181 PRPC_UNICODE_STRING ComputerName,
182 PRPC_SID UserSID,
183 PRPC_UNICODE_STRING Strings[],
184 BYTE *Data,
185 USHORT Flags,
186 DWORD *RecordNumber,
187 DWORD *TimeWritten)
188 {
189 USHORT i;
190
191 /* partial stub */
192 for (i = 0; i < NumStrings; i++)
193 {
194 switch (EventType)
195 {
196 case EVENTLOG_SUCCESS:
197 DPRINT1("Success: %S\n", Strings[i]);
198 break;
199
200 case EVENTLOG_ERROR_TYPE:
201 DPRINT1("Error: %S\n", Strings[i]);
202 break;
203
204 case EVENTLOG_WARNING_TYPE:
205 DPRINT1("Warning: %S\n", Strings[i]);
206 break;
207
208 case EVENTLOG_INFORMATION_TYPE:
209 DPRINT1("Info: %S\n", Strings[i]);
210 break;
211
212 default:
213 DPRINT1("Type %hu: %S\n", EventType, Strings[i]);
214 break;
215 }
216 }
217
218 return STATUS_SUCCESS;
219 }
220
221
222 /* Function 12 */
223 NTSTATUS ElfrClearELFA(
224 IELF_HANDLE LogHandle,
225 PRPC_STRING BackupFileName)
226 {
227 UNIMPLEMENTED;
228 return STATUS_NOT_IMPLEMENTED;
229 }
230
231
232 /* Function 13 */
233 NTSTATUS ElfrBackupELFA(
234 IELF_HANDLE LogHandle,
235 PRPC_STRING BackupFileName)
236 {
237 UNIMPLEMENTED;
238 return STATUS_NOT_IMPLEMENTED;
239 }
240
241
242 /* Function 14 */
243 NTSTATUS ElfrOpenELA(
244 EVENTLOG_HANDLE_A UNCServerName,
245 PRPC_STRING ModuleName,
246 PRPC_STRING RegModuleName,
247 DWORD MajorVersion,
248 DWORD MinorVersion,
249 IELF_HANDLE *LogHandle)
250 {
251 UNICODE_STRING UNCServerNameW = { 0, };
252 UNICODE_STRING ModuleNameW = { 0, };
253 UNICODE_STRING RegModuleNameW = { 0, };
254 NTSTATUS Status;
255
256 if (UNCServerName &&
257 !RtlCreateUnicodeStringFromAsciiz(&UNCServerNameW, UNCServerName))
258 {
259 return STATUS_NO_MEMORY;
260 }
261
262 if (ModuleName &&
263 !RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE))
264 {
265 RtlFreeUnicodeString(&UNCServerNameW);
266 return STATUS_NO_MEMORY;
267 }
268
269 if (RegModuleName &&
270 !RtlAnsiStringToUnicodeString(&RegModuleNameW, (PANSI_STRING)RegModuleName, TRUE))
271 {
272 RtlFreeUnicodeString(&UNCServerNameW);
273 RtlFreeUnicodeString(&ModuleNameW);
274 return STATUS_NO_MEMORY;
275 }
276
277 Status = ElfrOpenELW(
278 UNCServerName ? UNCServerNameW.Buffer : NULL,
279 ModuleName ? (PRPC_UNICODE_STRING)&ModuleNameW : NULL,
280 RegModuleName ? (PRPC_UNICODE_STRING)&RegModuleNameW : NULL,
281 MajorVersion,
282 MinorVersion,
283 LogHandle);
284
285 RtlFreeUnicodeString(&UNCServerNameW);
286 RtlFreeUnicodeString(&ModuleNameW);
287 RtlFreeUnicodeString(&RegModuleNameW);
288
289 return Status;
290 }
291
292
293 /* Function 15 */
294 NTSTATUS ElfrRegisterEventSourceA(
295 EVENTLOG_HANDLE_A UNCServerName,
296 PRPC_STRING ModuleName,
297 PRPC_STRING RegModuleName,
298 DWORD MajorVersion,
299 DWORD MinorVersion,
300 IELF_HANDLE *LogHandle)
301 {
302 UNIMPLEMENTED;
303 return STATUS_NOT_IMPLEMENTED;
304 }
305
306
307 /* Function 16 */
308 NTSTATUS ElfrOpenBELA(
309 EVENTLOG_HANDLE_A UNCServerName,
310 PRPC_STRING BackupFileName,
311 DWORD MajorVersion,
312 DWORD MinorVersion,
313 IELF_HANDLE *LogHandle)
314 {
315 UNIMPLEMENTED;
316 return STATUS_NOT_IMPLEMENTED;
317 }
318
319
320 /* Function 17 */
321 NTSTATUS ElfrReadELA(
322 IELF_HANDLE LogHandle,
323 DWORD ReadFlags,
324 DWORD RecordOffset,
325 RULONG NumberOfBytesToRead,
326 BYTE *Buffer,
327 DWORD *NumberOfBytesRead,
328 DWORD *MinNumberOfBytesNeeded)
329 {
330 UNIMPLEMENTED;
331 return STATUS_NOT_IMPLEMENTED;
332 }
333
334
335 /* Function 18 */
336 NTSTATUS ElfrReportEventA(
337 IELF_HANDLE LogHandle,
338 DWORD Time,
339 USHORT EventType,
340 USHORT EventCategory,
341 DWORD EventID,
342 USHORT NumStrings,
343 DWORD DataSize,
344 PRPC_STRING ComputerName,
345 PRPC_SID UserSID,
346 PRPC_STRING Strings[],
347 BYTE *Data,
348 USHORT Flags,
349 DWORD *RecordNumber,
350 DWORD *TimeWritten)
351 {
352 UNIMPLEMENTED;
353 return STATUS_NOT_IMPLEMENTED;
354 }
355
356
357 /* Function 19 */
358 NTSTATUS ElfrRegisterClusterSvc(
359 handle_t BindingHandle)
360 {
361 UNIMPLEMENTED;
362 return STATUS_NOT_IMPLEMENTED;
363 }
364
365
366 /* Function 20 */
367 NTSTATUS ElfrDeregisterClusterSvc(
368 handle_t BindingHandle)
369 {
370 UNIMPLEMENTED;
371 return STATUS_NOT_IMPLEMENTED;
372 }
373
374
375 /* Function 21 */
376 NTSTATUS ElfrWriteClusterEvents(
377 handle_t BindingHandle)
378 {
379 UNIMPLEMENTED;
380 return STATUS_NOT_IMPLEMENTED;
381 }
382
383
384 /* Function 22 */
385 NTSTATUS ElfrGetLogInformation(
386 IELF_HANDLE LogHandle,
387 DWORD InfoLevel,
388 BYTE *Buffer,
389 DWORD cbBufSize,
390 DWORD *pcbBytesNeeded)
391 {
392 UNIMPLEMENTED;
393 return STATUS_NOT_IMPLEMENTED;
394 }
395
396
397 /* Function 23 */
398 NTSTATUS ElfrFlushEL(
399 IELF_HANDLE LogHandle)
400 {
401 UNIMPLEMENTED;
402 return STATUS_NOT_IMPLEMENTED;
403 }
404
405
406 /* Function 24 */
407 NTSTATUS ElfrReportEventAndSourceW(
408 IELF_HANDLE LogHandle,
409 DWORD Time,
410 USHORT EventType,
411 USHORT EventCategory,
412 ULONG EventID,
413 PRPC_UNICODE_STRING SourceName,
414 USHORT NumStrings,
415 DWORD DataSize,
416 PRPC_UNICODE_STRING ComputerName,
417 PRPC_SID UserSID,
418 PRPC_UNICODE_STRING Strings[],
419 BYTE *Data,
420 USHORT Flags,
421 DWORD *RecordNumber,
422 DWORD *TimeWritten)
423 {
424 UNIMPLEMENTED;
425 return STATUS_NOT_IMPLEMENTED;
426 }
427
428
429 void __RPC_FAR *__RPC_USER midl_user_allocate(size_t len)
430 {
431 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
432 }
433
434
435 void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
436 {
437 HeapFree(GetProcessHeap(), 0, ptr);
438 }
439
440
441 void __RPC_USER IELF_HANDLE_rundown(IELF_HANDLE LogHandle)
442 {
443 }