From a3f9a8eb4ccde6e56661908e450d1ae625e86980 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 8 Jan 2012 23:03:23 +0000 Subject: [PATCH] [EVENTLOG] - Simplify ElfCreateEventLogHandle, ElfDeleteEventLogHandle and their callers. - Implement ElfrOpenBELA and ElfrOpenBELW. - Add ElfDeleteEventLogHandle stub. svn path=/trunk/; revision=54886 --- reactos/base/services/eventlog/rpc.c | 149 +++++++++++++++++---------- 1 file changed, 95 insertions(+), 54 deletions(-) diff --git a/reactos/base/services/eventlog/rpc.c b/reactos/base/services/eventlog/rpc.c index c8b072785c8..f0da0878bbb 100644 --- a/reactos/base/services/eventlog/rpc.c +++ b/reactos/base/services/eventlog/rpc.c @@ -44,12 +44,17 @@ DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter) return 0; } -PLOGHANDLE ElfCreateEventLogHandle(LPCWSTR Name, BOOL Create) + +static NTSTATUS +ElfCreateEventLogHandle(PLOGHANDLE *LogHandle, + LPCWSTR Name, + BOOL Create) { PLOGHANDLE lpLogHandle; PLOGFILE currentLogFile = NULL; INT i, LogsActive; PEVENTSOURCE pEventSource; + NTSTATUS Status; DPRINT("ElfCreateEventLogHandle(Name: %S)\n", Name); @@ -58,7 +63,7 @@ PLOGHANDLE ElfCreateEventLogHandle(LPCWSTR Name, BOOL Create) if (!lpLogHandle) { DPRINT1("Failed to allocate Heap!\n"); - return NULL; + return STATUS_NO_MEMORY; } wcscpy(lpLogHandle->szName, Name); @@ -68,7 +73,8 @@ PLOGHANDLE ElfCreateEventLogHandle(LPCWSTR Name, BOOL Create) if (LogsActive == 0) { DPRINT1("EventLog service reports no log files!\n"); - goto Cleanup; + Status = STATUS_UNSUCCESSFUL; + goto Done; } /* If Creating, default to the Application Log in case we fail, as documented on MSDN */ @@ -114,19 +120,33 @@ PLOGHANDLE ElfCreateEventLogHandle(LPCWSTR Name, BOOL Create) } if (!lpLogHandle->LogFile) - goto Cleanup; + Status = STATUS_UNSUCCESSFUL; - /* Append log handle */ - InsertTailList(&LogHandleListHead, &lpLogHandle->LogHandleListEntry); +Done: + if (NT_SUCCESS(Status)) + { + /* Append log handle */ + InsertTailList(&LogHandleListHead, &lpLogHandle->LogHandleListEntry); + *LogHandle = lpLogHandle; + } + else + { + HeapFree(GetProcessHeap(), 0, lpLogHandle); + } - return lpLogHandle; - -Cleanup: - HeapFree(GetProcessHeap(), 0, lpLogHandle); - - return NULL; + return Status; } + +static NTSTATUS +ElfCreateBackupLogHandle(PLOGHANDLE *LogHandle, + PUNICODE_STRING FileName) +{ + DPRINT("ElfCreateBackupLogHandle(FileName: %wZ)\n", FileName); + return STATUS_NOT_IMPLEMENTED; +} + + PLOGHANDLE ElfGetLogHandleEntryByHandle(IELF_HANDLE EventLogHandle) { PLOGHANDLE lpLogHandle; @@ -141,18 +161,19 @@ PLOGHANDLE ElfGetLogHandleEntryByHandle(IELF_HANDLE EventLogHandle) return lpLogHandle; } -BOOL ElfDeleteEventLogHandle(IELF_HANDLE EventLogHandle) + +static NTSTATUS +ElfDeleteEventLogHandle(IELF_HANDLE EventLogHandle) { PLOGHANDLE lpLogHandle = (PLOGHANDLE)EventLogHandle; + if (!ElfGetLogHandleEntryByHandle(lpLogHandle)) - { - return FALSE; - } + return STATUS_INVALID_HANDLE; RemoveEntryList(&lpLogHandle->LogHandleListEntry); HeapFree(GetProcessHeap(),0,lpLogHandle); - return TRUE; + return STATUS_SUCCESS; } /* Function 0 */ @@ -199,12 +220,7 @@ NTSTATUS ElfrBackupELFW( NTSTATUS ElfrCloseEL( IELF_HANDLE *LogHandle) { - if (!ElfDeleteEventLogHandle(*LogHandle)) - { - return STATUS_INVALID_HANDLE; - } - - return STATUS_SUCCESS; + return ElfDeleteEventLogHandle(*LogHandle); } @@ -212,12 +228,7 @@ NTSTATUS ElfrCloseEL( NTSTATUS ElfrDeregisterEventSource( IELF_HANDLE *LogHandle) { - if (!ElfDeleteEventLogHandle(*LogHandle)) - { - return STATUS_INVALID_HANDLE; - } - - return STATUS_SUCCESS; + return ElfDeleteEventLogHandle(*LogHandle); } @@ -307,14 +318,9 @@ NTSTATUS ElfrOpenELW( /*FIXME: Must verify that caller has read access */ - *LogHandle = ElfCreateEventLogHandle(ModuleName->Buffer, FALSE); - - if (*LogHandle == NULL) - { - return STATUS_INVALID_PARAMETER; - } - - return STATUS_SUCCESS; + return ElfCreateEventLogHandle((PLOGHANDLE *)LogHandle, + ModuleName->Buffer, + FALSE); } @@ -342,9 +348,9 @@ NTSTATUS ElfrRegisterEventSourceW( /*FIXME: Must verify that caller has write access */ - *LogHandle = ElfCreateEventLogHandle(ModuleName->Buffer, TRUE); - - return STATUS_SUCCESS; + return ElfCreateEventLogHandle((PLOGHANDLE *)LogHandle, + ModuleName->Buffer, + TRUE); } @@ -356,8 +362,17 @@ NTSTATUS ElfrOpenBELW( DWORD MinorVersion, IELF_HANDLE *LogHandle) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + DPRINT("ElfrOpenBELW(%wZ)\n", BackupFileName); + + if ((MajorVersion != 1) || (MinorVersion != 1)) + return STATUS_INVALID_PARAMETER; + + /*FIXME: UNCServerName must specify the server */ + + /*FIXME: Must verify that caller has read access */ + + return ElfCreateBackupLogHandle((PLOGHANDLE *)LogHandle, + (PUNICODE_STRING)BackupFileName); } @@ -605,16 +620,13 @@ NTSTATUS ElfrOpenELA( /* FIXME: Must verify that caller has read access */ - *LogHandle = ElfCreateEventLogHandle(ModuleNameW.Buffer, FALSE); + Status = ElfCreateEventLogHandle((PLOGHANDLE *)LogHandle, + ModuleNameW.Buffer, + FALSE); RtlFreeUnicodeString(&ModuleNameW); - if (*LogHandle == NULL) - { - return STATUS_INVALID_PARAMETER; - } - - return STATUS_SUCCESS; + return Status; } @@ -654,12 +666,13 @@ NTSTATUS ElfrRegisterEventSourceA( /* FIXME: Must verify that caller has write access */ - *LogHandle = ElfCreateEventLogHandle(ModuleNameW.Buffer, - TRUE); + Status = ElfCreateEventLogHandle((PLOGHANDLE *)LogHandle, + ModuleNameW.Buffer, + TRUE); RtlFreeUnicodeString(&ModuleNameW); - return STATUS_SUCCESS; + return Status; } @@ -671,8 +684,36 @@ NTSTATUS ElfrOpenBELA( DWORD MinorVersion, IELF_HANDLE *LogHandle) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNICODE_STRING BackupFileNameW; + NTSTATUS Status; + + DPRINT("ElfrOpenBELA(%Z)\n", BackupFileName); + + Status = RtlAnsiStringToUnicodeString(&BackupFileNameW, + (PANSI_STRING)BackupFileName, + TRUE); + if (!NT_SUCCESS(Status)) + { + DPRINT1("RtlAnsiStringToUnicodeString failed (Status 0x%08lx)\n", Status); + return Status; + } + + if ((MajorVersion != 1) || (MinorVersion != 1)) + { + RtlFreeUnicodeString(&BackupFileNameW); + return STATUS_INVALID_PARAMETER; + } + + /*FIXME: UNCServerName must specify the server */ + + /*FIXME: Must verify that caller has read access */ + + Status = ElfCreateBackupLogHandle((PLOGHANDLE *)LogHandle, + &BackupFileNameW); + + RtlFreeUnicodeString(&BackupFileNameW); + + return Status; }