2 * Win32 advapi functions
4 * Copyright 1995 Sven Verdoolaege
5 * Copyright 1998 Juergen Schmied
6 * Copyright 2003 Mike Hearn
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 /******************************************************************************
29 * BackupEventLogA [ADVAPI32.@]
32 BackupEventLogA (HANDLE hEventLog
,
33 LPCSTR lpBackupFileName
)
39 /******************************************************************************
40 * BackupEventLogW [ADVAPI32.@]
47 BackupEventLogW (HANDLE hEventLog
,
48 LPCWSTR lpBackupFileName
)
55 /******************************************************************************
56 * ClearEventLogA [ADVAPI32.@]
59 ClearEventLogA (HANDLE hEventLog
,
60 LPCSTR lpBackupFileName
)
67 /******************************************************************************
68 * ClearEventLogW [ADVAPI32.@]
71 ClearEventLogW (HANDLE hEventLog
,
72 LPCWSTR lpBackupFileName
)
79 /******************************************************************************
80 * CloseEventLog [ADVAPI32.@]
83 CloseEventLog (HANDLE hEventLog
)
90 /******************************************************************************
91 * DeregisterEventSource [ADVAPI32.@]
92 * Closes a handle to the specified event log
95 * hEventLog [I] Handle to event log
100 DeregisterEventSource(
103 RPC_BINDING_HANDLE BindingHandle
= NULL
;
104 LOGHANDLE Handle
= (LOGHANDLE
)hEventLog
;
107 DPRINT("%p\n", hEventLog
);
109 if (!EvtGetLocalHandle(&BindingHandle
))
111 SetLastError(ERROR_GEN_FAILURE
);
115 Status
= ElfrDeregisterEventSource(
118 if (!NT_SUCCESS(Status
))
120 SetLastError(RtlNtStatusToDosError(Status
));
127 /******************************************************************************
128 * GetNumberOfEventLogRecords [ADVAPI32.@]
135 GetNumberOfEventLogRecords (HANDLE hEventLog
,
136 PDWORD NumberOfRecords
)
143 /******************************************************************************
144 * GetOldestEventLogRecord [ADVAPI32.@]
151 GetOldestEventLogRecord (HANDLE hEventLog
,
159 /******************************************************************************
160 * NotifyChangeEventLog [ADVAPI32.@]
167 NotifyChangeEventLog (HANDLE hEventLog
,
175 /******************************************************************************
176 * OpenBackupEventLogA [ADVAPI32.@]
179 OpenBackupEventLogA (LPCSTR lpUNCServerName
,
187 /******************************************************************************
188 * OpenBackupEventLogW [ADVAPI32.@]
195 OpenBackupEventLogW (LPCWSTR lpUNCServerName
,
203 /******************************************************************************
204 * OpenEventLogA [ADVAPI32.@]
207 OpenEventLogA (LPCSTR lpUNCServerName
,
210 DPRINT1("(%s,%s),stub!\n",
211 lpUNCServerName
, lpSourceName
);
212 return (HANDLE
)0xcafe4242;
216 /******************************************************************************
217 * OpenEventLogW [ADVAPI32.@]
224 OpenEventLogW (LPCWSTR lpUNCServerName
,
225 LPCWSTR lpSourceName
)
232 /******************************************************************************
233 * ReadEventLogA [ADVAPI32.@]
236 ReadEventLogA (HANDLE hEventLog
,
238 DWORD dwRecordOffset
,
240 DWORD nNumberOfBytesToRead
,
242 DWORD
*pnMinNumberOfBytesNeeded
)
249 /******************************************************************************
250 * ReadEventLogW [ADVAPI32.@]
257 * nNumberOfBytesToRead []
259 * pnMinNumberOfBytesNeeded []
262 ReadEventLogW (HANDLE hEventLog
,
264 DWORD dwRecordOffset
,
266 DWORD nNumberOfBytesToRead
,
268 DWORD
*pnMinNumberOfBytesNeeded
)
275 /******************************************************************************
276 * RegisterEventSourceA [ADVAPI32.@]
279 RegisterEventSourceA (LPCSTR lpUNCServerName
,
282 UNICODE_STRING UNCServerName
;
283 UNICODE_STRING SourceName
;
286 RtlCreateUnicodeStringFromAsciiz (&UNCServerName
,
287 (PSTR
)lpUNCServerName
);
288 RtlCreateUnicodeStringFromAsciiz (&SourceName
,
291 ret
= RegisterEventSourceW (UNCServerName
.Buffer
,
294 RtlFreeUnicodeString (&UNCServerName
);
295 RtlFreeUnicodeString (&SourceName
);
301 /******************************************************************************
302 * RegisterEventSourceW [ADVAPI32.@]
303 * Returns a registered handle to an event log
306 * lpUNCServerName [I] Server name for source
307 * lpSourceName [I] Source name for registered handle
314 RegisterEventSourceW(
315 IN LPCWSTR lpUNCServerName
,
316 IN LPCWSTR lpSourceName
)
318 RPC_BINDING_HANDLE BindingHandle
= NULL
;
322 DPRINT("%S, %S\n", lpUNCServerName
, lpSourceName
);
324 if (lpUNCServerName
!= NULL
)
326 DPRINT1("lpUNCServerName argument not supported\n");
327 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
331 if (!EvtGetLocalHandle(&BindingHandle
))
333 SetLastError(ERROR_GEN_FAILURE
);
337 Status
= ElfrRegisterEventSourceW(
339 (LPWSTR
)lpUNCServerName
,
340 (LPWSTR
)lpSourceName
,
345 if (!NT_SUCCESS(Status
))
347 SetLastError(RtlNtStatusToDosError(Status
));
351 return (HANDLE
)Handle
;
355 /******************************************************************************
356 * ReportEventA [ADVAPI32.@]
359 ReportEventA (HANDLE hEventLog
,
369 LPCWSTR
*wideStrArray
;
374 if (wNumStrings
== 0)
377 if (lpStrings
== NULL
)
380 wideStrArray
= HeapAlloc (GetProcessHeap (),
382 sizeof(LPCWSTR
) * wNumStrings
);
384 for (i
= 0; i
< wNumStrings
; i
++)
386 RtlCreateUnicodeStringFromAsciiz (&str
,
388 wideStrArray
[i
] = str
.Buffer
;
391 ret
= ReportEventW (hEventLog
,
401 for (i
= 0; i
< wNumStrings
; i
++)
405 HeapFree (GetProcessHeap (),
407 (LPSTR
)wideStrArray
[i
]);
411 HeapFree (GetProcessHeap(),
419 /******************************************************************************
420 * ReportEventW [ADVAPI32.@]
434 ReportEventW (HANDLE hEventLog
,
448 if (wNumStrings
== 0)
451 if (lpStrings
== NULL
)
454 for (i
= 0; i
< wNumStrings
; i
++)
458 case EVENTLOG_SUCCESS
:
459 DPRINT1("Success: %S\n", lpStrings
[i
]);
462 case EVENTLOG_ERROR_TYPE
:
463 DPRINT1("Error: %S\n", lpStrings
[i
]);
466 case EVENTLOG_WARNING_TYPE
:
467 DPRINT1("Warning: %S\n", lpStrings
[i
]);
470 case EVENTLOG_INFORMATION_TYPE
:
471 DPRINT1("Info: %S\n", lpStrings
[i
]);
475 DPRINT1("Type %hu: %S\n", wType
, lpStrings
[i
]);