From ab618427e005f0aea12ab71f2c149bf403fe0027 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 15 Dec 2011 21:33:46 +0000 Subject: [PATCH] [EVENTLOG] - Implement ElfrClearELFA and ElfrClearELFW. - Fix the module name conversion in ElfrOpenELA and ElfrRegisterEventSourceA. svn path=/trunk/; revision=54656 --- reactos/base/services/eventlog/rpc.c | 59 ++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/reactos/base/services/eventlog/rpc.c b/reactos/base/services/eventlog/rpc.c index 79ad84a9f36..f5f88b32e46 100644 --- a/reactos/base/services/eventlog/rpc.c +++ b/reactos/base/services/eventlog/rpc.c @@ -160,8 +160,25 @@ NTSTATUS ElfrClearELFW( IELF_HANDLE LogHandle, PRPC_UNICODE_STRING BackupFileName) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + PLOGHANDLE lpLogHandle; + PLOGFILE lpLogFile; + + lpLogHandle = ElfGetLogHandleEntryByHandle(LogHandle); + if (!lpLogHandle) + { + return STATUS_INVALID_HANDLE; + } + + lpLogFile = lpLogHandle->LogFile; + + if (BackupFileName->Length > 0) + { + /* FIXME: Write a backup file */ + } + + LogfInitializeNew(lpLogFile); + + return STATUS_SUCCESS; } @@ -301,7 +318,7 @@ NTSTATUS ElfrRegisterEventSourceW( DWORD MinorVersion, IELF_HANDLE *LogHandle) { - DPRINT1("ElfrRegisterEventSourceW()\n"); + DPRINT("ElfrRegisterEventSourceW()\n"); if ((MajorVersion != 1) || (MinorVersion != 1)) return STATUS_INVALID_PARAMETER; @@ -310,7 +327,7 @@ NTSTATUS ElfrRegisterEventSourceW( if (RegModuleName->Length > 0) return STATUS_INVALID_PARAMETER; - DPRINT1("ModuleName: %S\n", ModuleName->Buffer); + DPRINT("ModuleName: %S\n", ModuleName->Buffer); /*FIXME: UNCServerName must specify the server or empty for local */ @@ -500,8 +517,21 @@ NTSTATUS ElfrClearELFA( IELF_HANDLE LogHandle, PRPC_STRING BackupFileName) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNICODE_STRING BackupFileNameW; + NTSTATUS Status; + + Status = RtlAnsiStringToUnicodeString(&BackupFileNameW, + (PANSI_STRING)BackupFileName, + TRUE); + if (!NT_SUCCESS(Status)) + return Status; + + Status = ElfrClearELFW(LogHandle, + (PRPC_UNICODE_STRING)&BackupFileNameW); + + RtlFreeUnicodeString(&BackupFileNameW); + + return Status; } @@ -525,6 +555,7 @@ NTSTATUS ElfrOpenELA( IELF_HANDLE *LogHandle) { UNICODE_STRING ModuleNameW; + NTSTATUS Status; if ((MajorVersion != 1) || (MinorVersion != 1)) return STATUS_INVALID_PARAMETER; @@ -533,7 +564,9 @@ NTSTATUS ElfrOpenELA( if (RegModuleName->Length > 0) return STATUS_INVALID_PARAMETER; - RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE); + Status = RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE); + if (!NT_SUCCESS(Status)) + return Status; /* FIXME: Must verify that caller has read access */ @@ -559,12 +592,16 @@ NTSTATUS ElfrRegisterEventSourceA( DWORD MinorVersion, IELF_HANDLE *LogHandle) { - UNICODE_STRING ModuleNameW = { 0, 0, NULL }; + UNICODE_STRING ModuleNameW; + NTSTATUS Status; - if (ModuleName && - !RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE)) + Status = RtlAnsiStringToUnicodeString(&ModuleNameW, + (PANSI_STRING)ModuleName, + TRUE); + if (!NT_SUCCESS(Status)) { - return STATUS_NO_MEMORY; + DPRINT1("RtlAnsiStringToUnicodeString failed (Status 0x%08lx)\n", Status); + return Status; } /* RegModuleName must be an empty string */ -- 2.17.1