From 6d51a10a1bedf5bd45d4a704ec4021dfbae82a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 18 May 2008 15:29:53 +0000 Subject: [PATCH] Make eventlog RPC interface more compatible with MS Windows svn path=/trunk/; revision=33585 --- reactos/base/services/eventlog/rpc.c | 394 ++++++++------- reactos/dll/win32/advapi32/service/eventlog.c | 92 ++-- reactos/include/reactos/idl/eventlogrpc.idl | 471 +++++++++--------- 3 files changed, 504 insertions(+), 453 deletions(-) diff --git a/reactos/base/services/eventlog/rpc.c b/reactos/base/services/eventlog/rpc.c index e176c97e44e..3ff20105e7b 100644 --- a/reactos/base/services/eventlog/rpc.c +++ b/reactos/base/services/eventlog/rpc.c @@ -10,15 +10,6 @@ #include "eventlog.h" -#ifdef __GNUC__ -/* HACK as long as idl compiler doesn't support well PUNICODE_STRING args */ -#define PANSI_STRING LPSTR -#define PUNICODE_STRING LPWSTR -#define BINDING_HANDLE handle_t BindingHandle, -#else -#define BINDING_HANDLE -#endif - /* FUNCTIONS ****************************************************************/ DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter) @@ -50,169 +41,168 @@ DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter) return 0; } -/* Function 0x00 */ + +/* Function 0 */ NTSTATUS ElfrClearELFW( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ PUNICODE_STRING BackupName) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + PRPC_UNICODE_STRING BackupFileName) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x01 */ + +/* Function 1 */ NTSTATUS ElfrBackupELFW( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ PUNICODE_STRING BackupName) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + PRPC_UNICODE_STRING BackupFileName) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x02 */ +/* Function 2 */ NTSTATUS ElfrCloseEL( - BINDING_HANDLE - /* [out][in] */ PLOGHANDLE Handle) + handle_t BindingHandle, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x03 */ +/* Function 3 */ NTSTATUS ElfrDeregisterEventSource( - BINDING_HANDLE - /* [out][in] */ PLOGHANDLE Handle) + handle_t BindingHandle, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; return STATUS_SUCCESS; } -/* Function 0x04 */ +/* Function 4 */ NTSTATUS ElfrNumberOfRecords( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [out] */ long __RPC_FAR * NumberOfRecords) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD *NumberOfRecords) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x05 */ +/* Function 5 */ NTSTATUS ElfrOldestRecord( - BINDING_HANDLE - /* [in] */ LOGHANDLE LogHandle, - /* [out] */ long __RPC_FAR * OldestRecNumber) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD *OldestRecordNumber) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x06 */ -NTSTATUS ElfrChangeNotify(void) +/* Function 6 */ +NTSTATUS ElfrChangeNotify( + handle_t BindingHandle, + IELF_HANDLE *LogHandle, + RPC_CLIENT_ID ClientId, + DWORD Event) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x07 */ +/* Function 7 */ NTSTATUS ElfrOpenELW( - BINDING_HANDLE - /* [unique][in] */ LPWSTR ServerName, - /* [in] */ PUNICODE_STRING FileName, - /* [in] */ PUNICODE_STRING NullStr, - /* [in] */ long MajorVer, - /* [in] */ long MinorVer, - /* [out] */ PLOGHANDLE Handle) + handle_t BindingHandle, + EVENTLOG_HANDLE_W UNCServerName, + PRPC_UNICODE_STRING ModuleName, + PRPC_UNICODE_STRING RegModuleName, + DWORD MajorVersion, + DWORD MinorVersion, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x08 */ +/* Function 8 */ NTSTATUS ElfrRegisterEventSourceW( - BINDING_HANDLE - /* [unique][in] */ LPWSTR ServerName, - /* [in] */ PUNICODE_STRING LogName, - /* [in] */ PUNICODE_STRING NullStr, - /* [in] */ long MajorVer, - /* [in] */ long MinorVer, - /* [out] */ PLOGHANDLE Handle) + handle_t BindingHandle, + EVENTLOG_HANDLE_W UNCServerName, + PRPC_UNICODE_STRING ModuleName, + PRPC_UNICODE_STRING RegModuleName, + DWORD MajorVersion, + DWORD MinorVersion, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; - *Handle = 1; + *LogHandle = 1; return STATUS_SUCCESS; } -/* Function 0x09 */ +/* Function 9 */ NTSTATUS ElfrOpenBELW( - BINDING_HANDLE - /* [unique][in] */ LPWSTR ServerName, - /* [in] */ PUNICODE_STRING BackupName, - /* [in] */ long MajorVer, - /* [in] */ long MinorVer, - /* [out] */ PLOGHANDLE Handle) + handle_t BindingHandle, + EVENTLOG_HANDLE_W UNCServerName, + PRPC_UNICODE_STRING BackupFileName, + DWORD MajorVersion, + DWORD MinorVersion, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x0a */ +/* Function 10 */ NTSTATUS ElfrReadELW( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ long Flags, - /* [in] */ long Offset, - /* [in] */ long BufSize, - /* [size_is][out] */unsigned char __RPC_FAR * Buffer, - /* [out] */ long __RPC_FAR * BytesRead, - /* [out] */ long __RPC_FAR * BytesNeeded) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD ReadFlags, + DWORD RecordOffset, + RULONG NumberOfBytesToRead, + BYTE *Buffer, + DWORD *NumberOfBytesRead, + DWORD *MinNumberOfBytesNeeded) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x0b */ +/* Function 11 */ NTSTATUS ElfrReportEventW( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ long Time, - /* [in] */ short Type, - /* [in] */ short Category, - /* [in] */ long ID, - /* [in] */ short NumStrings, - /* [in] */ long DataSize, - /* [in] */ PUNICODE_STRING ComputerName, - /* [unique][in] */ unsigned char __RPC_FAR * SID, - /* [unique][size_is][in] */ PUNICODE_STRING __RPC_FAR Strings[], - /* [unique][size_is][in] */ unsigned char __RPC_FAR * Data, - /* [in] */ short Flags, - /* [unique][out][in] */ long __RPC_FAR * unknown1, - /* [unique][out][in] */ long __RPC_FAR * unknown2) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD Time, + USHORT EventType, + USHORT EventCategory, + DWORD EventID, + USHORT NumStrings, + DWORD DataSize, + PRPC_UNICODE_STRING ComputerName, + PRPC_SID UserSID, + PRPC_UNICODE_STRING Strings[], + BYTE *Data, + USHORT Flags, + DWORD *RecordNumber, + DWORD *TimeWritten) { - short i; + USHORT i; /* partial stub */ - - if (NumStrings == 0) - return STATUS_SUCCESS; - - if (Strings == NULL) - return STATUS_SUCCESS; - for (i = 0; i < NumStrings; i++) { - switch (Type) + switch (EventType) { case EVENTLOG_SUCCESS: DPRINT1("Success: %S\n", Strings[i]); @@ -231,7 +221,7 @@ NTSTATUS ElfrReportEventW( break; default: - DPRINT1("Type %hu: %S\n", Type, Strings[i]); + DPRINT1("Type %hu: %S\n", EventType, Strings[i]); break; } } @@ -240,184 +230,236 @@ NTSTATUS ElfrReportEventW( } -/* Function 0x0c */ +/* Function 12 */ NTSTATUS ElfrClearELFA( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [unique][in] */ PANSI_STRING BackupName) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + PRPC_STRING BackupFileName) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x0d */ +/* Function 13 */ NTSTATUS ElfrBackupELFA( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ PANSI_STRING BackupName) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + PRPC_STRING BackupFileName) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x0e */ +/* Function 14 */ NTSTATUS ElfrOpenELA( - BINDING_HANDLE - /* [unique][in] */ LPSTR ServerName, - /* [in] */ PANSI_STRING LogName, - /* [in] */ PANSI_STRING NullStr, - /* [in] */ long MajorVer, - /* [in] */ long MinorVer, - /* [out] */ PLOGHANDLE Handle) + handle_t BindingHandle, + EVENTLOG_HANDLE_A UNCServerName, + PRPC_STRING ModuleName, + PRPC_STRING RegModuleName, + DWORD MajorVersion, + DWORD MinorVersion, + IELF_HANDLE *LogHandle) { - UNICODE_STRING logname = { 0, }, servername = { 0, }, StrNull = { 0, }; - NTSTATUS status; + UNICODE_STRING UNCServerNameW = { 0, }; + UNICODE_STRING ModuleNameW = { 0, }; + UNICODE_STRING RegModuleNameW = { 0, }; + NTSTATUS Status; - if (LogName && !RtlCreateUnicodeStringFromAsciiz(&logname, LogName)) + if (UNCServerName && + !RtlCreateUnicodeStringFromAsciiz(&UNCServerNameW, UNCServerName)) { return STATUS_NO_MEMORY; } - if (ServerName && - !RtlCreateUnicodeStringFromAsciiz(&servername, ServerName)) + if (ModuleName && + !RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE)) { - RtlFreeUnicodeString(&logname); + RtlFreeUnicodeString(&UNCServerNameW); return STATUS_NO_MEMORY; } - status = ElfrOpenELW(BindingHandle, servername.Buffer, logname.Buffer, - StrNull.Buffer, MajorVer, MinorVer, Handle); + if (RegModuleName && + !RtlAnsiStringToUnicodeString(&RegModuleNameW, (PANSI_STRING)RegModuleName, TRUE)) + { + RtlFreeUnicodeString(&UNCServerNameW); + RtlFreeUnicodeString(&ModuleNameW); + return STATUS_NO_MEMORY; + } - RtlFreeUnicodeString(&servername); - RtlFreeUnicodeString(&logname); + Status = ElfrOpenELW( + BindingHandle, + UNCServerName ? UNCServerNameW.Buffer : NULL, + ModuleName ? (PRPC_UNICODE_STRING)&ModuleNameW : NULL, + RegModuleName ? (PRPC_UNICODE_STRING)&RegModuleNameW : NULL, + MajorVersion, + MinorVersion, + LogHandle); - return status; + RtlFreeUnicodeString(&UNCServerNameW); + RtlFreeUnicodeString(&ModuleNameW); + RtlFreeUnicodeString(&RegModuleNameW); + + return Status; } -/* Function 0x0f */ +/* Function 15 */ NTSTATUS ElfrRegisterEventSourceA( - BINDING_HANDLE - /* [unique][in] */ LPSTR ServerName, - /* [in] */ PANSI_STRING LogName, - /* [in] */ PANSI_STRING NullStr, - /* [in] */ long MajorVer, - /* [in] */ long MinorVer, - /* [out] */ PLOGHANDLE Handle) + handle_t BindingHandle, + EVENTLOG_HANDLE_A UNCServerName, + PRPC_STRING ModuleName, + PRPC_STRING RegModuleName, + DWORD MajorVersion, + DWORD MinorVersion, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x10 */ +/* Function 16 */ NTSTATUS ElfrOpenBELA( - BINDING_HANDLE - /* [unique][in] */ LPSTR ServerName, - /* [in] */ PANSI_STRING BakckupName, - /* [in] */ long MajorVer, - /* [in] */ long MinorVer, - /* [out] */ PLOGHANDLE Handle) + handle_t BindingHandle, + EVENTLOG_HANDLE_A UNCServerName, + PRPC_STRING BackupFileName, + DWORD MajorVersion, + DWORD MinorVersion, + IELF_HANDLE *LogHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x11 */ +/* Function 17 */ NTSTATUS ElfrReadELA( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ long Flags, - /* [in] */ long Offset, - /* [in] */ long BufSize, - /* [size_is][out] */unsigned char __RPC_FAR * Buffer, - /* [out] */ long __RPC_FAR * BytesRead, - /* [out] */ long __RPC_FAR * BytesNeeded) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD ReadFlags, + DWORD RecordOffset, + RULONG NumberOfBytesToRead, + BYTE *Buffer, + DWORD *NumberOfBytesRead, + DWORD *MinNumberOfBytesNeeded) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x12 */ +/* Function 18 */ NTSTATUS ElfrReportEventA( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ long Time, - /* [in] */ short Type, - /* [in] */ short Category, - /* [in] */ long ID, - /* [in] */ short NumStrings, - /* [in] */ long DataSize, - /* [in] */ PANSI_STRING ComputerName, - /* [unique][in] */ unsigned char __RPC_FAR * SID, - /* [unique][size_is][in] */ PANSI_STRING __RPC_FAR Strings[], - /* [unique][size_is][in] */ unsigned char __RPC_FAR * Data, - /* [in] */ short Flags, - /* [unique][out][in] */ long __RPC_FAR * unknown1, - /* [unique][out][in] */ long __RPC_FAR * unknown2) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD Time, + USHORT EventType, + USHORT EventCategory, + DWORD EventID, + USHORT NumStrings, + DWORD DataSize, + PRPC_STRING ComputerName, + PRPC_SID UserSID, + PRPC_STRING Strings[], + BYTE *Data, + USHORT Flags, + DWORD *RecordNumber, + DWORD *TimeWritten) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x13 */ -NTSTATUS ElfrRegisterClusterSvc(void) +/* Function 19 */ +NTSTATUS ElfrRegisterClusterSvc( + handle_t BindingHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x14 */ -NTSTATUS ElfrDeregisterClusterSvc(void) +/* Function 20 */ +NTSTATUS ElfrDeregisterClusterSvc( + handle_t BindingHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x15 */ -NTSTATUS ElfrWriteClusterEvents(void) +/* Function 21 */ +NTSTATUS ElfrWriteClusterEvents( + handle_t BindingHandle) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x16 */ +/* Function 22 */ NTSTATUS ElfrGetLogInformation( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle, - /* [in] */ long InfoLevel, - /* [size_is][out] */unsigned char __RPC_FAR * Buffer, - /* [in] */ long BufSize, - /* [out] */ long __RPC_FAR * BytesNeeded) + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD InfoLevel, + BYTE *Buffer, + DWORD cbBufSize, + DWORD *pcbBytesNeeded) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -/* Function 0x17 */ +/* Function 23 */ NTSTATUS ElfrFlushEL( - BINDING_HANDLE - /* [in] */ LOGHANDLE Handle) + handle_t BindingHandle, + IELF_HANDLE LogHandle) { - DbgPrint("EventLogFlush UNIMPLEMENTED\n"); + UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } + +/* Function 24 */ +NTSTATUS ElfrReportEventAndSourceW( + handle_t BindingHandle, + IELF_HANDLE LogHandle, + DWORD Time, + USHORT EventType, + USHORT EventCategory, + ULONG EventID, + PRPC_UNICODE_STRING SourceName, + USHORT NumStrings, + DWORD DataSize, + PRPC_UNICODE_STRING ComputerName, + PRPC_SID UserSID, + PRPC_UNICODE_STRING Strings[], + BYTE *Data, + USHORT Flags, + DWORD *RecordNumber, + DWORD *TimeWritten) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + void __RPC_FAR *__RPC_USER midl_user_allocate(size_t len) { return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); } + void __RPC_USER midl_user_free(void __RPC_FAR * ptr) { HeapFree(GetProcessHeap(), 0, ptr); } + + +void __RPC_USER IELF_HANDLE_rundown(IELF_HANDLE LogHandle) +{ +} diff --git a/reactos/dll/win32/advapi32/service/eventlog.c b/reactos/dll/win32/advapi32/service/eventlog.c index 8fc3f3f208a..5052ceacf8d 100644 --- a/reactos/dll/win32/advapi32/service/eventlog.c +++ b/reactos/dll/win32/advapi32/service/eventlog.c @@ -30,7 +30,7 @@ WINE_DECLARE_DEBUG_CHANNEL(eventlog); typedef struct _LOG_INFO { RPC_BINDING_HANDLE BindingHandle; - LOGHANDLE LogHandle; + IELF_HANDLE LogHandle; BOOL bLocal; } LOG_INFO, *PLOG_INFO; @@ -44,11 +44,13 @@ BackupEventLogA( { PLOG_INFO pLog; NTSTATUS Status; - ANSI_STRING BackupFileName; + RPC_STRING BackupFileName; TRACE("%p, %s\n", hEventLog, lpBackupFileName); - RtlInitAnsiString(&BackupFileName, lpBackupFileName); + BackupFileName.Buffer = (LPSTR)lpBackupFileName; + BackupFileName.Length = BackupFileName.MaximumLength = + lpBackupFileName ? strlen(lpBackupFileName) : 0; pLog = (PLOG_INFO)hEventLog; if (!pLog) @@ -59,7 +61,7 @@ BackupEventLogA( Status = ElfrBackupELFA( pLog->BindingHandle, pLog->LogHandle, - BackupFileName.Buffer); + &BackupFileName); if (!NT_SUCCESS(Status)) { @@ -83,11 +85,13 @@ BackupEventLogW( { PLOG_INFO pLog; NTSTATUS Status; - UNICODE_STRING BackupFileName; + RPC_UNICODE_STRING BackupFileName; - TRACE("%p, %s\n", hEventLog, lpBackupFileName); + TRACE("%p, %s\n", hEventLog, debugstr_w(lpBackupFileName)); - RtlInitUnicodeString(&BackupFileName, lpBackupFileName); + BackupFileName.Buffer = (LPWSTR)lpBackupFileName; + BackupFileName.Length = BackupFileName.MaximumLength = + lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0; pLog = (PLOG_INFO)hEventLog; if (!pLog) @@ -98,7 +102,7 @@ BackupEventLogW( Status = ElfrBackupELFW( pLog->BindingHandle, pLog->LogHandle, - BackupFileName.Buffer); + &BackupFileName); if (!NT_SUCCESS(Status)) { @@ -119,11 +123,13 @@ ClearEventLogA( { PLOG_INFO pLog; NTSTATUS Status; - ANSI_STRING BackupFileName; + RPC_STRING BackupFileName; TRACE("%p, %s\n", hEventLog, lpBackupFileName); - RtlInitAnsiString(&BackupFileName, lpBackupFileName); + BackupFileName.Buffer = (LPSTR)lpBackupFileName; + BackupFileName.Length = BackupFileName.MaximumLength = + lpBackupFileName ? strlen(lpBackupFileName) : 0; pLog = (PLOG_INFO)hEventLog; if (!pLog) @@ -134,7 +140,7 @@ ClearEventLogA( Status = ElfrClearELFA( pLog->BindingHandle, pLog->LogHandle, - BackupFileName.Buffer); + &BackupFileName); if (!NT_SUCCESS(Status)) { @@ -155,11 +161,13 @@ ClearEventLogW( { PLOG_INFO pLog; NTSTATUS Status; - UNICODE_STRING BackupFileName; + RPC_UNICODE_STRING BackupFileName; - TRACE("%p, %s\n", hEventLog, lpBackupFileName); + TRACE("%p, %s\n", hEventLog, debugstr_w(lpBackupFileName)); - RtlInitUnicodeString(&BackupFileName, lpBackupFileName); + BackupFileName.Buffer = (LPWSTR)lpBackupFileName; + BackupFileName.Length = BackupFileName.MaximumLength = + lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0; pLog = (PLOG_INFO)hEventLog; if (!pLog) @@ -170,7 +178,7 @@ ClearEventLogW( Status = ElfrClearELFW( pLog->BindingHandle, pLog->LogHandle, - BackupFileName.Buffer); + &BackupFileName); if (!NT_SUCCESS(Status)) { @@ -191,7 +199,7 @@ CloseEventLog( PLOG_INFO pLog; NTSTATUS Status; - TRACE("%p", hEventLog); + TRACE("%p\n", hEventLog); pLog = (PLOG_INFO)hEventLog; if (!pLog) @@ -271,7 +279,7 @@ GetNumberOfEventLogRecords( { PLOG_INFO pLog; NTSTATUS Status; - long Records; + DWORD Records; TRACE("%p, %p\n", hEventLog, NumberOfRecords); @@ -310,7 +318,7 @@ GetOldestEventLogRecord( { PLOG_INFO pLog; NTSTATUS Status; - long Oldest; + DWORD Oldest; TRACE("%p, %p\n", hEventLog, OldestRecord); @@ -405,13 +413,13 @@ OpenBackupEventLogW( { PLOG_INFO pLog; NTSTATUS Status; - UNICODE_STRING UNCServerName; - UNICODE_STRING FileName; + RPC_UNICODE_STRING FileName; - TRACE("%s, %s\n", lpUNCServerName, lpFileName); + TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpFileName)); - RtlInitUnicodeString(&UNCServerName, lpUNCServerName); - RtlInitUnicodeString(&FileName, lpFileName); + FileName.Buffer = (LPWSTR)lpFileName; + FileName.Length = FileName.MaximumLength = + lpFileName ? wcslen(lpFileName) * sizeof(WCHAR) : 0; pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO)); if (!pLog) @@ -446,8 +454,8 @@ OpenBackupEventLogW( Status = ElfrOpenBELW( pLog->BindingHandle, - UNCServerName.Buffer, - FileName.Buffer, + (LPWSTR)lpUNCServerName, + &FileName, 0, 0, &pLog->LogHandle); @@ -509,13 +517,13 @@ OpenEventLogW( { PLOG_INFO pLog; NTSTATUS Status; - UNICODE_STRING UNCServerName; - UNICODE_STRING SourceName; + RPC_UNICODE_STRING SourceName; - TRACE("%s, %s\n", lpUNCServerName, lpSourceName); + TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName)); - RtlInitUnicodeString(&UNCServerName, lpUNCServerName); - RtlInitUnicodeString(&SourceName, lpSourceName); + SourceName.Buffer = (LPWSTR)lpSourceName; + SourceName.Length = SourceName.MaximumLength = + lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0; pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO)); if (!pLog) @@ -550,8 +558,8 @@ OpenEventLogW( Status = ElfrOpenELW( pLog->BindingHandle, - UNCServerName.Buffer, - SourceName.Buffer, + (LPWSTR)lpUNCServerName, + &SourceName, NULL, 0, 0, @@ -582,7 +590,7 @@ ReadEventLogA( { PLOG_INFO pLog; NTSTATUS Status; - long bytesRead, minNumberOfBytesNeeded; + DWORD bytesRead, minNumberOfBytesNeeded; TRACE("%p, %lu, %lu, %p, %lu, %p, %p\n", hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, @@ -639,7 +647,7 @@ ReadEventLogW( { PLOG_INFO pLog; NTSTATUS Status; - long bytesRead, minNumberOfBytesNeeded; + DWORD bytesRead, minNumberOfBytesNeeded; TRACE("%p, %lu, %lu, %p, %lu, %p, %p\n", hEventLog, dwReadFlags, dwRecordOffset, lpBuffer, @@ -726,13 +734,13 @@ RegisterEventSourceW( { PLOG_INFO pLog; NTSTATUS Status; - UNICODE_STRING UNCServerName; - UNICODE_STRING SourceName; + RPC_UNICODE_STRING SourceName; - TRACE("%s, %s\n", lpUNCServerName, lpSourceName); + TRACE("%s, %s\n", debugstr_w(lpUNCServerName), debugstr_w(lpSourceName)); - RtlInitUnicodeString(&UNCServerName, lpUNCServerName); - RtlInitUnicodeString(&SourceName, lpSourceName); + SourceName.Buffer = (LPWSTR)lpSourceName; + SourceName.Length = SourceName.MaximumLength = + lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0; pLog = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_INFO)); if (!pLog) @@ -767,9 +775,9 @@ RegisterEventSourceW( Status = ElfrRegisterEventSourceW( pLog->BindingHandle, - UNCServerName.Buffer, - SourceName.Buffer, - L"", + (LPWSTR)lpUNCServerName, + &SourceName, + NULL, 0, 0, &pLog->LogHandle); diff --git a/reactos/include/reactos/idl/eventlogrpc.idl b/reactos/include/reactos/idl/eventlogrpc.idl index 9ea222b8207..824c097be9e 100644 --- a/reactos/include/reactos/idl/eventlogrpc.idl +++ b/reactos/include/reactos/idl/eventlogrpc.idl @@ -1,306 +1,307 @@ /* - * Copyright 2005 Saveliy Tretiakov - * - * 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. + * Event Log RPC interface definition */ +#include + +cpp_quote("#if !defined(__EVENTLOG_H__) && !defined(__ADVAPI32_H)") +typedef long NTSTATUS; +cpp_quote("#endif") + +#define MAX_BATCH_BUFF 0x0007FFFF + +typedef [range(0, MAX_BATCH_BUFF)] unsigned long RULONG; +typedef struct _RPC_STRING { + USHORT Length; + USHORT MaximumLength; + [size_is(MaximumLength), length_is(Length)] LPSTR Buffer; +} RPC_STRING, *PRPC_STRING; + +typedef [context_handle] unsigned long IELF_HANDLE; +typedef IELF_HANDLE *PIELF_HANDLE; +typedef [handle, unique] LPWSTR EVENTLOG_HANDLE_W; +typedef [handle, unique] LPSTR EVENTLOG_HANDLE_A; + +typedef struct _RPC_CLIENT_ID { + DWORD UniqueProcess; + DWORD UniqueThread; +} RPC_CLIENT_ID, *PRPC_CLIENT_ID; + [ - uuid(82273FDC-E32A-18C3-3F78-827929DC23EA), - version(0.0), - pointer_default(unique) + uuid(82273FDC-E32A-18C3-3F78-827929DC23EA), + version(0.0), + pointer_default(unique) #ifndef __midl - ,explicit_handle + ,explicit_handle #endif ] interface eventlog { - cpp_quote("#if 0") -#ifdef __midl - typedef [handle, unique] wchar_t *LPWSTR; - typedef [handle, unique] char *LPSTR; - typedef unsigned int NTSTATUS; -#else - #define LPWSTR wchar_t * - #define LPSTR char * - #define NTSTATUS long -#endif - -#ifdef __midl - typedef struct _UNICODE_STRING { - unsigned short Length; - unsigned short MaximumLength; - [size_is(MaximumLength/2), unique] wchar_t *Buffer; - } UNICODE_STRING, *PUNICODE_STRING; - - typedef struct _ANSI_STRING { - unsigned short Length; - unsigned short MaximumLength; - [size_is(MaximumLength), unique] char *Buffer; - } ANSI_STRING, *PANSI_STRING; -#else - #define PUNICODE_STRING wchar_t * - #define PANSI_STRING char * -#endif - cpp_quote("#endif") - -#ifdef __midl - typedef [context_handle] struct _LOGHANDLE { - int pos; - } *LOGHANDLE; - typedef LOGHANDLE *PLOGHANDLE; -#else - #define LOGHANDLE unsigned int - #define PLOGHANDLE unsigned int* - cpp_quote("typedef unsigned int LOGHANDLE, *PLOGHANDLE;") -#endif - - /* Function 0x00 */ - NTSTATUS ElfrClearELFW( + /* Function 0 */ + NTSTATUS ElfrClearELFW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] PUNICODE_STRING BackupName); + [in] IELF_HANDLE LogHandle, + [in, unique] PRPC_UNICODE_STRING BackupFileName); - /* Function 0x01 */ - NTSTATUS ElfrBackupELFW( + /* Function 1 */ + NTSTATUS ElfrBackupELFW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] PUNICODE_STRING BackupName); + [in] IELF_HANDLE LogHandle, + [in, unique] PRPC_UNICODE_STRING BackupFileName); - /* Function 0x02 */ - NTSTATUS ElfrCloseEL( + /* Function 2 */ + NTSTATUS ElfrCloseEL( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in,out] PLOGHANDLE Handle); + [in, out] IELF_HANDLE *LogHandle); - /* Function 0x03 */ - NTSTATUS ElfrDeregisterEventSource( + /* Function 3 */ + NTSTATUS ElfrDeregisterEventSource( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in,out] PLOGHANDLE Handle); + [in, out] IELF_HANDLE *LogHandle); - /* Function 0x04 */ - NTSTATUS ElfrNumberOfRecords( + /* Function 4 */ + NTSTATUS ElfrNumberOfRecords( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [out] long *NumberOfRecords); + [in] IELF_HANDLE LogHandle, + [out] DWORD *NumberOfRecords); - /* Function 0x05 */ - NTSTATUS ElfrOldestRecord( + /* Function 5 */ + NTSTATUS ElfrOldestRecord( #ifndef __midl - handle_t BindingHandle, + handle_t BindingHandle, #endif - [in] LOGHANDLE LogHandle, - [out] long *OldestRecNumber); + [in] IELF_HANDLE LogHandle, + [out] DWORD *OldestRecordNumber); - /* Function 0x06 */ - //NTSTATUS ElfrChangeNotify(); // FIXME - - /* Function 0x07 */ - NTSTATUS ElfrOpenELW( + /* Function 6 */ + NTSTATUS ElfrChangeNotify( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in, unique] LPWSTR ServerName, - [in] PUNICODE_STRING FileName, - [in] PUNICODE_STRING NullStr, - [in] long MajorVer, - [in] long MinorVer, - [out] PLOGHANDLE Handle ); + [in] IELF_HANDLE *LogHandle, + [in] RPC_CLIENT_ID ClientId, + [in] DWORD Event); - /* Function 0x08 */ - NTSTATUS ElfrRegisterEventSourceW( + /* Function 7 */ + NTSTATUS ElfrOpenELW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in, unique] LPWSTR ServerName, - [in] PUNICODE_STRING LogName, - [in] PUNICODE_STRING NullStr, - [in] long MajorVer, - [in] long MinorVer, - [out] PLOGHANDLE Handle); + [in] EVENTLOG_HANDLE_W UNCServerName, + [in] PRPC_UNICODE_STRING ModuleName, + [in] PRPC_UNICODE_STRING RegModuleName, + [in] DWORD MajorVersion, + [in] DWORD MinorVersion, + [out] IELF_HANDLE* LogHandle); - /* Function 0x09 */ - NTSTATUS ElfrOpenBELW( + /* Function 8 */ + NTSTATUS ElfrRegisterEventSourceW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in, unique] LPWSTR ServerName, - [in] PUNICODE_STRING BackupName, - [in] long MajorVer, - [in] long MinorVer, - [out] PLOGHANDLE Handle); + [in] EVENTLOG_HANDLE_W UNCServerName, + [in] PRPC_UNICODE_STRING ModuleName, + [in] PRPC_UNICODE_STRING RegModuleName, + [in] DWORD MajorVersion, + [in] DWORD MinorVersion, + [out] IELF_HANDLE* LogHandle); - /* Function 0x0a */ - NTSTATUS ElfrReadELW( + /* Function 9 */ + NTSTATUS ElfrOpenBELW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] long Flags, - [in] long Offset, - [in] long BufSize, - [out,size_is(BufSize)] unsigned char *Buffer, - [out] long *BytesRead, - [out] long *BytesNeeded); + [in] EVENTLOG_HANDLE_W UNCServerName, + [in] PRPC_UNICODE_STRING BackupFileName, + [in] DWORD MajorVersion, + [in] DWORD MinorVersion, + [out] IELF_HANDLE* LogHandle); - /* Function 0x0b */ - NTSTATUS ElfrReportEventW( + /* Function 10 */ + NTSTATUS ElfrReadELW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] long Time, - [in] short Type, - [in] short Category, - [in] long ID, - [in] short NumStrings, - [in] long DataSize, - [in] PUNICODE_STRING ComputerName, - [in, unique] unsigned char *SID, -#ifdef __midl - [in, size_is(NumStrings), unique] PUNICODE_STRING Strings[*], -#else - [in, size_is(NumStrings), unique] PUNICODE_STRING *Strings, -#endif - [in, size_is(DataSize), unique] unsigned char *Data, - [in] short Flags, - [in,out,unique] long *unknown1, - [in,out,unique] long *unknown2); + [in] IELF_HANDLE LogHandle, + [in] DWORD ReadFlags, + [in] DWORD RecordOffset, + [in] RULONG NumberOfBytesToRead, + [out, size_is(NumberOfBytesToRead)] BYTE *Buffer, + [out] DWORD *NumberOfBytesRead, + [out] DWORD *MinNumberOfBytesNeeded); - /* Function 0x0c */ - NTSTATUS ElfrClearELFA( + /* Function 11 */ + NTSTATUS ElfrReportEventW( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in,unique] PANSI_STRING BackupName); + [in] IELF_HANDLE LogHandle, + [in] DWORD Time, + [in] USHORT EventType, + [in] USHORT EventCategory, + [in] DWORD EventID, + [in, range(0, 256)] USHORT NumStrings, + [in, range(0, 61440)] DWORD DataSize, + [in] PRPC_UNICODE_STRING ComputerName, + [in, unique] PRPC_SID UserSID, + [in, size_is(NumStrings), unique] PRPC_UNICODE_STRING Strings[*], + [in, size_is(DataSize), unique] BYTE *Data, + [in] USHORT Flags, + [in, out, unique] DWORD *RecordNumber, + [in, out, unique] DWORD *TimeWritten); - /* Function 0x0d */ - NTSTATUS ElfrBackupELFA( + /* Function 12 */ + NTSTATUS ElfrClearELFA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] PANSI_STRING BackupName); + [in] IELF_HANDLE LogHandle, + [in, unique] PRPC_STRING BackupFileName); - /* Function 0x0e */ - NTSTATUS ElfrOpenELA( + /* Function 13 */ + NTSTATUS ElfrBackupELFA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in, unique] LPSTR ServerName, - [in] PANSI_STRING LogName, - [in] PANSI_STRING NullStr, - [in] long MajorVer, - [in] long MinorVer, - [out] PLOGHANDLE Handle); + [in] IELF_HANDLE LogHandle, + [in, unique] PRPC_STRING BackupFileName); - /* Function 0x0f */ - NTSTATUS ElfrRegisterEventSourceA( + /* Function 14 */ + NTSTATUS ElfrOpenELA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in, unique] LPSTR ServerName, - [in] PANSI_STRING LogName, - [in] PANSI_STRING NullStr, - [in] long MajorVer, - [in] long MinorVer, - [out] PLOGHANDLE Handle); + [in] EVENTLOG_HANDLE_A UNCServerName, + [in] PRPC_STRING ModuleName, + [in] PRPC_STRING RegModuleName, + [in] DWORD MajorVersion, + [in] DWORD MinorVersion, + [out] IELF_HANDLE* LogHandle); - /* Function 0x10 */ - NTSTATUS ElfrOpenBELA( + /* Function 15 */ + NTSTATUS ElfrRegisterEventSourceA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in, unique] LPSTR ServerName, - [in] PANSI_STRING BakckupName, - [in] long MajorVer, - [in] long MinorVer, - [out] PLOGHANDLE Handle); + [in] EVENTLOG_HANDLE_A UNCServerName, + [in] PRPC_STRING ModuleName, + [in] PRPC_STRING RegModuleName, + [in] DWORD MajorVersion, + [in] DWORD MinorVersion, + [out] IELF_HANDLE* LogHandle); - /* Function 0x11 */ - NTSTATUS ElfrReadELA( + /* Function 16 */ + NTSTATUS ElfrOpenBELA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] long Flags, - [in] long Offset, - [in] long BufSize, - [out,size_is(BufSize)] unsigned char *Buffer, - [out] long *BytesRead, - [out] long *BytesNeeded); + [in] EVENTLOG_HANDLE_A UNCServerName, + [in] PRPC_STRING BackupFileName, + [in] DWORD MajorVersion, + [in] DWORD MinorVersion, + [out] IELF_HANDLE* LogHandle); - /* Function 0x12 */ - NTSTATUS ElfrReportEventA( + /* Function 17 */ + NTSTATUS ElfrReadELA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] long Time, - [in] short Type, - [in] short Category, - [in] long ID, - [in] short NumStrings, - [in] long DataSize, - [in] PANSI_STRING ComputerName, - [in, unique] unsigned char *SID, -#ifdef __midl - [in, size_is(NumStrings), unique] PANSI_STRING Strings[*], -#else - [in, size_is(NumStrings), unique] PANSI_STRING *Strings, -#endif - [in, size_is(DataSize), unique] unsigned char *Data, - [in] short Flags, - [in,out,unique] long *unknown1, - [in,out,unique] long *unknown2); + [in] IELF_HANDLE LogHandle, + [in] DWORD ReadFlags, + [in] DWORD RecordOffset, + [in] RULONG NumberOfBytesToRead, + [out, size_is(NumberOfBytesToRead)] BYTE *Buffer, + [out] DWORD *NumberOfBytesRead, + [out] DWORD *MinNumberOfBytesNeeded); - /* Function 0x13 */ - //NTSTATUS ElfrRegisterClusterSvc(); //FIXME - - /* Function 0x14 */ - //NTSTATUS ElfrDeregisterClusterSvc(); //FIXME - - /* Function 0x15 */ - //NTSTATUS ElfrWriteClusterEvents(); //FIXME - - /* Function 0x16 */ - NTSTATUS ElfrGetLogInformation( + /* Function 18 */ + NTSTATUS ElfrReportEventA( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle, #endif - [in] LOGHANDLE Handle, - [in] long InfoLevel, - [out, size_is(BufSize)] unsigned char *Buffer, - [in] long BufSize, - [out] long *BytesNeeded); + [in] IELF_HANDLE LogHandle, + [in] DWORD Time, + [in] USHORT EventType, + [in] USHORT EventCategory, + [in] DWORD EventID, + [in, range(0, 256)] USHORT NumStrings, + [in, range(0, 61440)] DWORD DataSize, + [in] PRPC_STRING ComputerName, + [in, unique] PRPC_SID UserSID, + [in, size_is(NumStrings), unique] PRPC_STRING Strings[*], + [in, size_is(DataSize), unique] BYTE *Data, + [in] USHORT Flags, + [in, out, unique] DWORD *RecordNumber, + [in, out, unique] DWORD *TimeWritten); - /* Function 0x17 */ - NTSTATUS ElfrFlushEL( + /* Function 19 */ + NTSTATUS ElfrRegisterClusterSvc( #ifndef __midl - handle_t BindingHandle, + [in] handle_t BindingHandle #endif - [in] LOGHANDLE Handle); + ); /* FIXME */ + /* Function 20 */ + NTSTATUS ElfrDeregisterClusterSvc( +#ifndef __midl + [in] handle_t BindingHandle +#endif + ); /* FIXME */ + + /* Function 21 */ + NTSTATUS ElfrWriteClusterEvents( +#ifndef __midl + [in] handle_t BindingHandle +#endif + ); /* FIXME */ + + /* Function 22 */ + NTSTATUS ElfrGetLogInformation( +#ifndef __midl + [in] handle_t BindingHandle, +#endif + [in] IELF_HANDLE LogHandle, + [in] DWORD InfoLevel, + [out, size_is(cbBufSize)] BYTE *Buffer, + [in, range(0, 1024)] DWORD cbBufSize, + [out] DWORD *pcbBytesNeeded); + + /* Function 23 */ + NTSTATUS ElfrFlushEL( +#ifndef __midl + [in] handle_t BindingHandle, +#endif + [in] IELF_HANDLE LogHandle); + + /* Function 24 */ + NTSTATUS ElfrReportEventAndSourceW( +#ifndef __midl + [in] handle_t BindingHandle, +#endif + [in] IELF_HANDLE LogHandle, + [in] DWORD Time, + [in] USHORT EventType, + [in] USHORT EventCategory, + [in] ULONG EventID, + [in] PRPC_UNICODE_STRING SourceName, + [in, range(0, 256)] USHORT NumStrings, + [in, range(0, 61440)] DWORD DataSize, + [in] PRPC_UNICODE_STRING ComputerName, + [in, unique] PRPC_SID UserSID, + [in, size_is(NumStrings), unique] PRPC_UNICODE_STRING Strings[*], + [in, size_is(DataSize), unique] BYTE *Data, + [in] USHORT Flags, + [in, out, unique] DWORD *RecordNumber, + [in, out, unique] DWORD *TimeWritten); }