usp10: Free default_language items when freeing script cache.
[wine.git] / dlls / advapi32 / eventlog.c
blob0922fff903a9fc19c1bbc67ad25e90cb8b6c6e3f
1 /*
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 #include <stdarg.h>
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winerror.h"
28 #include "winternl.h"
29 #include "wmistr.h"
30 #include "evntrace.h"
31 #include "evntprov.h"
33 #include "wine/unicode.h"
34 #include "wine/debug.h"
36 #include "advapi32_misc.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(advapi);
39 WINE_DECLARE_DEBUG_CHANNEL(eventlog);
41 /******************************************************************************
42 * BackupEventLogA [ADVAPI32.@]
44 * Saves the event log to a backup file.
46 * PARAMS
47 * hEventLog [I] Handle to event log to backup.
48 * lpBackupFileName [I] Name of the backup file.
50 * RETURNS
51 * Success: nonzero. File lpBackupFileName will contain the contents of
52 * hEvenLog.
53 * Failure: zero.
55 BOOL WINAPI BackupEventLogA( HANDLE hEventLog, LPCSTR lpBackupFileName )
57 LPWSTR backupW;
58 BOOL ret;
60 backupW = SERV_dup(lpBackupFileName);
61 ret = BackupEventLogW(hEventLog, backupW);
62 HeapFree(GetProcessHeap(), 0, backupW);
64 return ret;
67 /******************************************************************************
68 * BackupEventLogW [ADVAPI32.@]
70 * See BackupEventLogA.
72 BOOL WINAPI BackupEventLogW( HANDLE hEventLog, LPCWSTR lpBackupFileName )
74 FIXME("(%p,%s) stub\n", hEventLog, debugstr_w(lpBackupFileName));
76 if (!lpBackupFileName)
78 SetLastError(ERROR_INVALID_PARAMETER);
79 return FALSE;
82 if (!hEventLog)
84 SetLastError(ERROR_INVALID_HANDLE);
85 return FALSE;
88 if (GetFileAttributesW(lpBackupFileName) != INVALID_FILE_ATTRIBUTES)
90 SetLastError(ERROR_ALREADY_EXISTS);
91 return FALSE;
94 return TRUE;
97 /******************************************************************************
98 * ClearEventLogA [ADVAPI32.@]
100 * Clears the event log and optionally saves the log to a backup file.
102 * PARAMS
103 * hEvenLog [I] Handle to event log to clear.
104 * lpBackupFileName [I] Name of the backup file.
106 * RETURNS
107 * Success: nonzero. if lpBackupFileName != NULL, lpBackupFileName will
108 * contain the contents of hEvenLog and the log will be cleared.
109 * Failure: zero. Fails if the event log is empty or if lpBackupFileName
110 * exists.
112 BOOL WINAPI ClearEventLogA( HANDLE hEventLog, LPCSTR lpBackupFileName )
114 LPWSTR backupW;
115 BOOL ret;
117 backupW = SERV_dup(lpBackupFileName);
118 ret = ClearEventLogW(hEventLog, backupW);
119 HeapFree(GetProcessHeap(), 0, backupW);
121 return ret;
124 /******************************************************************************
125 * ClearEventLogW [ADVAPI32.@]
127 * See ClearEventLogA.
129 BOOL WINAPI ClearEventLogW( HANDLE hEventLog, LPCWSTR lpBackupFileName )
131 FIXME("(%p,%s) stub\n", hEventLog, debugstr_w(lpBackupFileName));
133 if (!hEventLog)
135 SetLastError(ERROR_INVALID_HANDLE);
136 return FALSE;
139 return TRUE;
142 /******************************************************************************
143 * CloseEventLog [ADVAPI32.@]
145 * Closes a read handle to the event log.
147 * PARAMS
148 * hEventLog [I/O] Handle of the event log to close.
150 * RETURNS
151 * Success: nonzero
152 * Failure: zero
154 BOOL WINAPI CloseEventLog( HANDLE hEventLog )
156 FIXME("(%p) stub\n", hEventLog);
158 if (!hEventLog)
160 SetLastError(ERROR_INVALID_HANDLE);
161 return FALSE;
164 return TRUE;
167 /******************************************************************************
168 * ControlTraceW [ADVAPI32.@]
170 * Control a givel event trace session
173 ULONG WINAPI ControlTraceW( TRACEHANDLE hSession, LPCWSTR SessionName, PEVENT_TRACE_PROPERTIES Properties, ULONG control )
175 FIXME("(%s, %s, %p, %d) stub\n", wine_dbgstr_longlong(hSession), debugstr_w(SessionName), Properties, control);
176 return ERROR_SUCCESS;
179 /******************************************************************************
180 * ControlTraceA [ADVAPI32.@]
182 * See ControlTraceW.
185 ULONG WINAPI ControlTraceA( TRACEHANDLE hSession, LPCSTR SessionName, PEVENT_TRACE_PROPERTIES Properties, ULONG control )
187 FIXME("(%s, %s, %p, %d) stub\n", wine_dbgstr_longlong(hSession), debugstr_a(SessionName), Properties, control);
188 return ERROR_SUCCESS;
191 /******************************************************************************
192 * FlushTraceA [ADVAPI32.@]
194 ULONG WINAPI FlushTraceA ( TRACEHANDLE hSession, LPCSTR SessionName, PEVENT_TRACE_PROPERTIES Properties )
196 return ControlTraceA( hSession, SessionName, Properties, EVENT_TRACE_CONTROL_FLUSH );
199 /******************************************************************************
200 * FlushTraceW [ADVAPI32.@]
202 ULONG WINAPI FlushTraceW ( TRACEHANDLE hSession, LPCWSTR SessionName, PEVENT_TRACE_PROPERTIES Properties )
204 return ControlTraceW( hSession, SessionName, Properties, EVENT_TRACE_CONTROL_FLUSH );
208 /******************************************************************************
209 * DeregisterEventSource [ADVAPI32.@]
211 * Closes a write handle to an event log
213 * PARAMS
214 * hEventLog [I/O] Handle of the event log.
216 * RETURNS
217 * Success: nonzero
218 * Failure: zero
220 BOOL WINAPI DeregisterEventSource( HANDLE hEventLog )
222 FIXME("(%p) stub\n", hEventLog);
223 return TRUE;
226 /******************************************************************************
227 * EnableTraceEx [ADVAPI32.@]
229 ULONG WINAPI EnableTraceEx( LPCGUID provider, LPCGUID source, TRACEHANDLE hSession, ULONG enable,
230 UCHAR level, ULONGLONG anykeyword, ULONGLONG allkeyword, ULONG enableprop,
231 PEVENT_FILTER_DESCRIPTOR filterdesc )
233 FIXME("(%s, %s, %s, %d, %c, %s, %s, %d, %p): stub\n", debugstr_guid(provider),
234 debugstr_guid(source), wine_dbgstr_longlong(hSession), enable, level,
235 wine_dbgstr_longlong(anykeyword), wine_dbgstr_longlong(allkeyword),
236 enableprop, filterdesc);
238 return ERROR_SUCCESS;
241 /******************************************************************************
242 * EnableTrace [ADVAPI32.@]
244 ULONG WINAPI EnableTrace( ULONG enable, ULONG flag, ULONG level, LPCGUID guid, TRACEHANDLE hSession )
246 FIXME("(%d, 0x%x, %d, %s, %s): stub\n", enable, flag, level,
247 debugstr_guid(guid), wine_dbgstr_longlong(hSession));
249 return ERROR_SUCCESS;
252 /******************************************************************************
253 * GetEventLogInformation [ADVAPI32.@]
255 * Retrieve some information about an event log.
257 * PARAMS
258 * hEventLog [I] Handle to an open event log.
259 * dwInfoLevel [I] Level of information (only EVENTLOG_FULL_INFO)
260 * lpBuffer [I/O] The buffer for the returned information
261 * cbBufSize [I] The size of the buffer
262 * pcbBytesNeeded [O] The needed bytes to hold the information
264 * RETURNS
265 * Success: TRUE. lpBuffer will hold the information and pcbBytesNeeded shows
266 * the needed buffer size.
267 * Failure: FALSE.
269 BOOL WINAPI GetEventLogInformation( HANDLE hEventLog, DWORD dwInfoLevel, LPVOID lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)
271 EVENTLOG_FULL_INFORMATION *efi;
273 FIXME("(%p, %d, %p, %d, %p) stub\n", hEventLog, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
275 if (dwInfoLevel != EVENTLOG_FULL_INFO)
277 SetLastError(ERROR_INVALID_LEVEL);
278 return FALSE;
281 if (!hEventLog)
283 SetLastError(ERROR_INVALID_HANDLE);
284 return FALSE;
287 if (!lpBuffer || !pcbBytesNeeded)
289 /* FIXME: This will be handled properly when eventlog is moved
290 * to a higher level
292 SetLastError(RPC_X_NULL_REF_POINTER);
293 return FALSE;
296 *pcbBytesNeeded = sizeof(EVENTLOG_FULL_INFORMATION);
297 if (cbBufSize < sizeof(EVENTLOG_FULL_INFORMATION))
299 SetLastError(ERROR_INSUFFICIENT_BUFFER);
300 return FALSE;
303 /* Pretend the log is not full */
304 efi = (EVENTLOG_FULL_INFORMATION *)lpBuffer;
305 efi->dwFull = 0;
307 return TRUE;
310 /******************************************************************************
311 * GetNumberOfEventLogRecords [ADVAPI32.@]
313 * Retrieves the number of records in an event log.
315 * PARAMS
316 * hEventLog [I] Handle to an open event log.
317 * NumberOfRecords [O] Number of records in the log.
319 * RETURNS
320 * Success: nonzero. NumberOfRecords will contain the number of records in
321 * the log.
322 * Failure: zero
324 BOOL WINAPI GetNumberOfEventLogRecords( HANDLE hEventLog, PDWORD NumberOfRecords )
326 FIXME("(%p,%p) stub\n", hEventLog, NumberOfRecords);
328 if (!NumberOfRecords)
330 SetLastError(ERROR_INVALID_PARAMETER);
331 return FALSE;
334 if (!hEventLog)
336 SetLastError(ERROR_INVALID_HANDLE);
337 return FALSE;
340 *NumberOfRecords = 0;
342 return TRUE;
345 /******************************************************************************
346 * GetOldestEventLogRecord [ADVAPI32.@]
348 * Retrieves the absolute record number of the oldest record in an even log.
350 * PARAMS
351 * hEventLog [I] Handle to an open event log.
352 * OldestRecord [O] Absolute record number of the oldest record.
354 * RETURNS
355 * Success: nonzero. OldestRecord contains the record number of the oldest
356 * record in the log.
357 * Failure: zero
359 BOOL WINAPI GetOldestEventLogRecord( HANDLE hEventLog, PDWORD OldestRecord )
361 FIXME("(%p,%p) stub\n", hEventLog, OldestRecord);
363 if (!OldestRecord)
365 SetLastError(ERROR_INVALID_PARAMETER);
366 return FALSE;
369 if (!hEventLog)
371 SetLastError(ERROR_INVALID_HANDLE);
372 return FALSE;
375 *OldestRecord = 0;
377 return TRUE;
380 /******************************************************************************
381 * NotifyChangeEventLog [ADVAPI32.@]
383 * Enables an application to receive notification when an event is written
384 * to an event log.
386 * PARAMS
387 * hEventLog [I] Handle to an event log.
388 * hEvent [I] Handle to a manual-reset event object.
390 * RETURNS
391 * Success: nonzero
392 * Failure: zero
394 BOOL WINAPI NotifyChangeEventLog( HANDLE hEventLog, HANDLE hEvent )
396 FIXME("(%p,%p) stub\n", hEventLog, hEvent);
397 return TRUE;
400 /******************************************************************************
401 * OpenBackupEventLogA [ADVAPI32.@]
403 * Opens a handle to a backup event log.
405 * PARAMS
406 * lpUNCServerName [I] Universal Naming Convention name of the server on which
407 * this will be performed.
408 * lpFileName [I] Specifies the name of the backup file.
410 * RETURNS
411 * Success: Handle to the backup event log.
412 * Failure: NULL
414 HANDLE WINAPI OpenBackupEventLogA( LPCSTR lpUNCServerName, LPCSTR lpFileName )
416 LPWSTR uncnameW, filenameW;
417 HANDLE handle;
419 uncnameW = SERV_dup(lpUNCServerName);
420 filenameW = SERV_dup(lpFileName);
421 handle = OpenBackupEventLogW(uncnameW, filenameW);
422 HeapFree(GetProcessHeap(), 0, uncnameW);
423 HeapFree(GetProcessHeap(), 0, filenameW);
425 return handle;
428 /******************************************************************************
429 * OpenBackupEventLogW [ADVAPI32.@]
431 * See OpenBackupEventLogA.
433 HANDLE WINAPI OpenBackupEventLogW( LPCWSTR lpUNCServerName, LPCWSTR lpFileName )
435 FIXME("(%s,%s) stub\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName));
437 if (!lpFileName)
439 SetLastError(ERROR_INVALID_PARAMETER);
440 return NULL;
443 if (lpUNCServerName && lpUNCServerName[0])
445 FIXME("Remote server not supported\n");
446 SetLastError(RPC_S_SERVER_UNAVAILABLE);
447 return NULL;
450 if (GetFileAttributesW(lpFileName) == INVALID_FILE_ATTRIBUTES)
452 SetLastError(ERROR_FILE_NOT_FOUND);
453 return NULL;
456 return (HANDLE)0xcafe4242;
459 /******************************************************************************
460 * OpenEventLogA [ADVAPI32.@]
462 * Opens a handle to the specified event log.
464 * PARAMS
465 * lpUNCServerName [I] UNC name of the server on which the event log is
466 * opened.
467 * lpSourceName [I] Name of the log.
469 * RETURNS
470 * Success: Handle to an event log.
471 * Failure: NULL
473 HANDLE WINAPI OpenEventLogA( LPCSTR uncname, LPCSTR source )
475 LPWSTR uncnameW, sourceW;
476 HANDLE handle;
478 uncnameW = SERV_dup(uncname);
479 sourceW = SERV_dup(source);
480 handle = OpenEventLogW(uncnameW, sourceW);
481 HeapFree(GetProcessHeap(), 0, uncnameW);
482 HeapFree(GetProcessHeap(), 0, sourceW);
484 return handle;
487 /******************************************************************************
488 * OpenEventLogW [ADVAPI32.@]
490 * See OpenEventLogA.
492 HANDLE WINAPI OpenEventLogW( LPCWSTR uncname, LPCWSTR source )
494 FIXME("(%s,%s) stub\n", debugstr_w(uncname), debugstr_w(source));
496 if (!source)
498 SetLastError(ERROR_INVALID_PARAMETER);
499 return NULL;
502 if (uncname && uncname[0])
504 FIXME("Remote server not supported\n");
505 SetLastError(RPC_S_SERVER_UNAVAILABLE);
506 return NULL;
509 return (HANDLE)0xcafe4242;
512 /******************************************************************************
513 * QueryAllTracesW [ADVAPI32.@]
515 * Query information for started event trace sessions
518 ULONG WINAPI QueryAllTracesW( PEVENT_TRACE_PROPERTIES * parray, ULONG arraycount, PULONG psessioncount )
520 FIXME("(%p, %d, %p) stub\n", parray, arraycount, psessioncount);
522 if (psessioncount) *psessioncount = 0;
523 return ERROR_SUCCESS;
526 /******************************************************************************
527 * QueryAllTracesA [ADVAPI32.@]
529 * See QueryAllTracesW.
531 ULONG WINAPI QueryAllTracesA( PEVENT_TRACE_PROPERTIES * parray, ULONG arraycount, PULONG psessioncount )
533 FIXME("(%p, %d, %p) stub\n", parray, arraycount, psessioncount);
535 if (psessioncount) *psessioncount = 0;
536 return ERROR_SUCCESS;
539 /******************************************************************************
540 * ReadEventLogA [ADVAPI32.@]
542 * Reads a whole number of entries from an event log.
544 * PARAMS
545 * hEventLog [I] Handle of the event log to read.
546 * dwReadFlags [I] see MSDN doc.
547 * dwRecordOffset [I] Log-entry record number to start at.
548 * lpBuffer [O] Buffer for the data read.
549 * nNumberOfBytesToRead [I] Size of lpBuffer.
550 * pnBytesRead [O] Receives number of bytes read.
551 * pnMinNumberOfBytesNeeded [O] Receives number of bytes required for the
552 * next log entry.
554 * RETURNS
555 * Success: nonzero
556 * Failure: zero
558 BOOL WINAPI ReadEventLogA( HANDLE hEventLog, DWORD dwReadFlags, DWORD dwRecordOffset,
559 LPVOID lpBuffer, DWORD nNumberOfBytesToRead, DWORD *pnBytesRead, DWORD *pnMinNumberOfBytesNeeded )
561 FIXME("(%p,0x%08x,0x%08x,%p,0x%08x,%p,%p) stub\n", hEventLog, dwReadFlags,
562 dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
564 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
565 return FALSE;
568 /******************************************************************************
569 * ReadEventLogW [ADVAPI32.@]
571 * See ReadEventLogA.
573 BOOL WINAPI ReadEventLogW( HANDLE hEventLog, DWORD dwReadFlags, DWORD dwRecordOffset,
574 LPVOID lpBuffer, DWORD nNumberOfBytesToRead, DWORD *pnBytesRead, DWORD *pnMinNumberOfBytesNeeded )
576 FIXME("(%p,0x%08x,0x%08x,%p,0x%08x,%p,%p) stub\n", hEventLog, dwReadFlags,
577 dwRecordOffset, lpBuffer, nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
579 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
580 return FALSE;
583 /******************************************************************************
584 * RegisterEventSourceA [ADVAPI32.@]
586 * Returns a registered handle to an event log.
588 * PARAMS
589 * lpUNCServerName [I] UNC name of the source server.
590 * lpSourceName [I] Specifies the name of the event source to retrieve.
592 * RETURNS
593 * Success: Handle to the event log.
594 * Failure: NULL. Returns ERROR_INVALID_HANDLE if lpSourceName specifies the
595 * Security event log.
597 HANDLE WINAPI RegisterEventSourceA( LPCSTR lpUNCServerName, LPCSTR lpSourceName )
599 UNICODE_STRING lpUNCServerNameW;
600 UNICODE_STRING lpSourceNameW;
601 HANDLE ret;
603 FIXME("(%s,%s): stub\n", debugstr_a(lpUNCServerName), debugstr_a(lpSourceName));
605 RtlCreateUnicodeStringFromAsciiz(&lpUNCServerNameW, lpUNCServerName);
606 RtlCreateUnicodeStringFromAsciiz(&lpSourceNameW, lpSourceName);
607 ret = RegisterEventSourceW(lpUNCServerNameW.Buffer,lpSourceNameW.Buffer);
608 RtlFreeUnicodeString (&lpUNCServerNameW);
609 RtlFreeUnicodeString (&lpSourceNameW);
610 return ret;
613 /******************************************************************************
614 * RegisterEventSourceW [ADVAPI32.@]
616 * See RegisterEventSourceA.
618 HANDLE WINAPI RegisterEventSourceW( LPCWSTR lpUNCServerName, LPCWSTR lpSourceName )
620 FIXME("(%s,%s): stub\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName));
621 return (HANDLE)0xcafe4242;
624 /******************************************************************************
625 * ReportEventA [ADVAPI32.@]
627 * Writes an entry at the end of an event log.
629 * PARAMS
630 * hEventLog [I] Handle of an event log.
631 * wType [I] See MSDN doc.
632 * wCategory [I] Event category.
633 * dwEventID [I] Event identifier.
634 * lpUserSid [I] Current user's security identifier.
635 * wNumStrings [I] Number of insert strings in lpStrings.
636 * dwDataSize [I] Size of event-specific raw data to write.
637 * lpStrings [I] Buffer containing an array of string to be merged.
638 * lpRawData [I] Buffer containing the binary data.
640 * RETURNS
641 * Success: nonzero. Entry was written to the log.
642 * Failure: zero.
644 * NOTES
645 * The ReportEvent function adds the time, the entry's length, and the
646 * offsets before storing the entry in the log. If lpUserSid != NULL, the
647 * username is also logged.
649 BOOL WINAPI ReportEventA ( HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID,
650 PSID lpUserSid, WORD wNumStrings, DWORD dwDataSize, LPCSTR *lpStrings, LPVOID lpRawData)
652 LPWSTR *wideStrArray;
653 UNICODE_STRING str;
654 UINT i;
655 BOOL ret;
657 FIXME("(%p,0x%04x,0x%04x,0x%08x,%p,0x%04x,0x%08x,%p,%p): stub\n", hEventLog,
658 wType, wCategory, dwEventID, lpUserSid, wNumStrings, dwDataSize, lpStrings, lpRawData);
660 if (wNumStrings == 0) return TRUE;
661 if (!lpStrings) return TRUE;
663 wideStrArray = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWSTR) * wNumStrings);
664 for (i = 0; i < wNumStrings; i++)
666 RtlCreateUnicodeStringFromAsciiz(&str, lpStrings[i]);
667 wideStrArray[i] = str.Buffer;
669 ret = ReportEventW(hEventLog, wType, wCategory, dwEventID, lpUserSid,
670 wNumStrings, dwDataSize, (LPCWSTR *)wideStrArray, lpRawData);
671 for (i = 0; i < wNumStrings; i++)
673 HeapFree( GetProcessHeap(), 0, wideStrArray[i] );
675 HeapFree(GetProcessHeap(), 0, wideStrArray);
676 return ret;
679 /******************************************************************************
680 * ReportEventW [ADVAPI32.@]
682 * See ReportEventA.
684 BOOL WINAPI ReportEventW( HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID,
685 PSID lpUserSid, WORD wNumStrings, DWORD dwDataSize, LPCWSTR *lpStrings, LPVOID lpRawData )
687 UINT i;
689 FIXME("(%p,0x%04x,0x%04x,0x%08x,%p,0x%04x,0x%08x,%p,%p): stub\n", hEventLog,
690 wType, wCategory, dwEventID, lpUserSid, wNumStrings, dwDataSize, lpStrings, lpRawData);
692 /* partial stub */
694 if (wNumStrings == 0) return TRUE;
695 if (!lpStrings) return TRUE;
697 for (i = 0; i < wNumStrings; i++)
699 switch (wType)
701 case EVENTLOG_SUCCESS:
702 TRACE_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
703 break;
704 case EVENTLOG_ERROR_TYPE:
705 ERR_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
706 break;
707 case EVENTLOG_WARNING_TYPE:
708 WARN_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
709 break;
710 default:
711 TRACE_(eventlog)("%s\n", debugstr_w(lpStrings[i]));
712 break;
715 return TRUE;
718 /******************************************************************************
719 * RegisterTraceGuidsW [ADVAPI32.@]
721 * Register an event trace provider and the event trace classes that it uses
722 * to generate events.
724 * PARAMS
725 * RequestAddress [I] ControlCallback function
726 * RequestContext [I] Optional provider-defined context
727 * ControlGuid [I] GUID of the registering provider
728 * GuidCount [I] Number of elements in the TraceGuidReg array
729 * TraceGuidReg [I/O] Array of TRACE_GUID_REGISTRATION structures
730 * MofImagePath [I] not supported, set to NULL
731 * MofResourceName [I] not supported, set to NULL
732 * RegistrationHandle [O] Provider's registration handle
734 * RETURNS
735 * Success: ERROR_SUCCESS
736 * Failure: System error code
738 * FIXME
739 * Stub.
741 ULONG WINAPI RegisterTraceGuidsW( WMIDPREQUEST RequestAddress,
742 PVOID RequestContext, LPCGUID ControlGuid, ULONG GuidCount,
743 PTRACE_GUID_REGISTRATION TraceGuidReg, LPCWSTR MofImagePath,
744 LPCWSTR MofResourceName, PTRACEHANDLE RegistrationHandle )
746 FIXME("(%p, %p, %s, %u, %p, %s, %s, %p,): stub\n", RequestAddress, RequestContext,
747 debugstr_guid(ControlGuid), GuidCount, TraceGuidReg, debugstr_w(MofImagePath),
748 debugstr_w(MofResourceName), RegistrationHandle);
749 return ERROR_SUCCESS;
752 /******************************************************************************
753 * RegisterTraceGuidsA [ADVAPI32.@]
755 * See RegisterTraceGuidsW.
757 * FIXME
758 * Stub.
760 ULONG WINAPI RegisterTraceGuidsA( WMIDPREQUEST RequestAddress,
761 PVOID RequestContext, LPCGUID ControlGuid, ULONG GuidCount,
762 PTRACE_GUID_REGISTRATION TraceGuidReg, LPCSTR MofImagePath,
763 LPCSTR MofResourceName, PTRACEHANDLE RegistrationHandle )
765 FIXME("(%p, %p, %s, %u, %p, %s, %s, %p,): stub\n", RequestAddress, RequestContext,
766 debugstr_guid(ControlGuid), GuidCount, TraceGuidReg, debugstr_a(MofImagePath),
767 debugstr_a(MofResourceName), RegistrationHandle);
768 return ERROR_SUCCESS;
771 /******************************************************************************
772 * StartTraceW [ADVAPI32.@]
774 * Register and start an event trace session
777 ULONG WINAPI StartTraceW( PTRACEHANDLE pSessionHandle, LPCWSTR SessionName, PEVENT_TRACE_PROPERTIES Properties )
779 FIXME("(%p, %s, %p) stub\n", pSessionHandle, debugstr_w(SessionName), Properties);
780 if (pSessionHandle) *pSessionHandle = 0xcafe4242;
781 return ERROR_SUCCESS;
784 /******************************************************************************
785 * StartTraceA [ADVAPI32.@]
787 * See StartTraceW.
790 ULONG WINAPI StartTraceA( PTRACEHANDLE pSessionHandle, LPCSTR SessionName, PEVENT_TRACE_PROPERTIES Properties )
792 FIXME("(%p, %s, %p) stub\n", pSessionHandle, debugstr_a(SessionName), Properties);
793 if (pSessionHandle) *pSessionHandle = 0xcafe4242;
794 return ERROR_SUCCESS;
797 /******************************************************************************
798 * StopTraceW [ADVAPI32.@]
800 * Stop an event trace session
803 ULONG WINAPI StopTraceW( TRACEHANDLE session, LPCWSTR session_name, PEVENT_TRACE_PROPERTIES properties )
805 FIXME("(%s, %s, %p) stub\n", wine_dbgstr_longlong(session), debugstr_w(session_name), properties);
806 return ERROR_SUCCESS;
809 /******************************************************************************
810 * StopTraceA [ADVAPI32.@]
812 * See StopTraceW.
815 ULONG WINAPI StopTraceA( TRACEHANDLE session, LPCSTR session_name, PEVENT_TRACE_PROPERTIES properties )
817 FIXME("(%s, %s, %p) stub\n", wine_dbgstr_longlong(session), debugstr_a(session_name), properties);
818 return ERROR_SUCCESS;
821 /******************************************************************************
822 * TraceEvent [ADVAPI32.@]
824 ULONG WINAPI TraceEvent( TRACEHANDLE SessionHandle, PEVENT_TRACE_HEADER EventTrace )
826 FIXME("%s %p\n", wine_dbgstr_longlong(SessionHandle), EventTrace);
827 return ERROR_CALL_NOT_IMPLEMENTED;
830 /******************************************************************************
831 * UnregisterTraceGuids [ADVAPI32.@]
833 * See RegisterTraceGuids
835 * FIXME
836 * Stub.
838 ULONG WINAPI UnregisterTraceGuids( TRACEHANDLE RegistrationHandle )
840 FIXME("%s: stub\n", wine_dbgstr_longlong(RegistrationHandle));
841 return ERROR_CALL_NOT_IMPLEMENTED;
844 /******************************************************************************
845 * EventRegister [ADVAPI32.@]
847 ULONG WINAPI EventRegister( LPCGUID provider, PENABLECALLBACK callback, PVOID context, PREGHANDLE handle )
849 FIXME("%s, %p, %p, %p\n", debugstr_guid(provider), callback, context, handle);
851 *handle = 0xdeadbeef;
852 return ERROR_SUCCESS;
855 /******************************************************************************
856 * EventUnregister [ADVAPI32.@]
858 ULONG WINAPI EventUnregister( REGHANDLE handle )
860 FIXME("%s: stub\n", wine_dbgstr_longlong(handle));
861 return ERROR_SUCCESS;
864 /******************************************************************************
865 * EventEnabled [ADVAPI32.@]
868 BOOLEAN WINAPI EventEnabled( REGHANDLE handle, PCEVENT_DESCRIPTOR descriptor )
870 FIXME("(%s, %p): stub\n", wine_dbgstr_longlong(handle), descriptor);
871 return FALSE;
874 /******************************************************************************
875 * EventWrite [ADVAPI32.@]
877 ULONG WINAPI EventWrite( REGHANDLE handle, PCEVENT_DESCRIPTOR descriptor, ULONG count,
878 PEVENT_DATA_DESCRIPTOR data )
880 FIXME("%s, %p, %u, %p: stub\n", wine_dbgstr_longlong(handle), descriptor, count, data);
881 return ERROR_SUCCESS;
884 /******************************************************************************
885 * QueryTraceW [ADVAPI32.@]
887 ULONG WINAPI QueryTraceW( TRACEHANDLE handle, LPCWSTR sessionname, PEVENT_TRACE_PROPERTIES properties )
889 FIXME("%s %s %p: stub\n", wine_dbgstr_longlong(handle), debugstr_w(sessionname), properties);
890 return ERROR_CALL_NOT_IMPLEMENTED;
893 /******************************************************************************
894 * OpenTraceA [ADVAPI32.@]
896 TRACEHANDLE WINAPI OpenTraceA( PEVENT_TRACE_LOGFILEA logfile )
898 FIXME("%p: stub\n", logfile);
899 SetLastError(ERROR_ACCESS_DENIED);
900 return INVALID_PROCESSTRACE_HANDLE;
903 /******************************************************************************
904 * OpenTraceW [ADVAPI32.@]
906 TRACEHANDLE WINAPI OpenTraceW( PEVENT_TRACE_LOGFILEW logfile )
908 FIXME("%p: stub\n", logfile);
909 SetLastError(ERROR_ACCESS_DENIED);
910 return INVALID_PROCESSTRACE_HANDLE;
913 /******************************************************************************
914 * ProcessTrace [ADVAPI32.@]
916 ULONG WINAPI ProcessTrace( PTRACEHANDLE HandleArray, ULONG HandleCount, LPFILETIME StartTime, LPFILETIME EndTime)
918 FIXME("%p %u %p %p: stub\n", HandleArray, HandleCount, StartTime, EndTime);
919 return ERROR_CALL_NOT_IMPLEMENTED;
922 /******************************************************************************
923 * TraceMessage [ADVAPI32.@]
925 ULONG WINAPIV TraceMessage( TRACEHANDLE handle, ULONG flags, LPGUID guid, USHORT number, ... )
927 __ms_va_list valist;
928 ULONG ret;
930 __ms_va_start( valist, number );
931 ret = TraceMessageVa( handle, flags, guid, number, valist );
932 __ms_va_end( valist );
933 return ret;
936 /******************************************************************************
937 * TraceMessageVa [ADVAPI32.@]
939 ULONG WINAPI TraceMessageVa( TRACEHANDLE handle, ULONG flags, LPGUID guid, USHORT number,
940 __ms_va_list args )
942 FIXME("(%s %x %s %d) : stub\n", wine_dbgstr_longlong(handle), flags, debugstr_guid(guid), number);
943 return ERROR_SUCCESS;
946 /******************************************************************************
947 * CloseTrace [ADVAPI32.@]
949 ULONG WINAPI CloseTrace( TRACEHANDLE handle )
951 FIXME("%s: stub\n", wine_dbgstr_longlong(handle));
952 return ERROR_INVALID_HANDLE;
955 /******************************************************************************
956 * EnumerateTraceGuids [ADVAPI32.@]
958 ULONG WINAPI EnumerateTraceGuids(PTRACE_GUID_PROPERTIES *propertiesarray,
959 ULONG arraycount, PULONG guidcount)
961 FIXME("%p %d %p: stub\n", propertiesarray, arraycount, guidcount);
962 return ERROR_INVALID_PARAMETER;