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);
if (!lpLogHandle)
{
DPRINT1("Failed to allocate Heap!\n");
- return NULL;
+ return STATUS_NO_MEMORY;
}
wcscpy(lpLogHandle->szName, Name);
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 */
}
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;
+ return Status;
+}
-Cleanup:
- HeapFree(GetProcessHeap(), 0, lpLogHandle);
- return NULL;
+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;
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 */
NTSTATUS ElfrCloseEL(
IELF_HANDLE *LogHandle)
{
- if (!ElfDeleteEventLogHandle(*LogHandle))
- {
- return STATUS_INVALID_HANDLE;
- }
-
- return STATUS_SUCCESS;
+ return ElfDeleteEventLogHandle(*LogHandle);
}
NTSTATUS ElfrDeregisterEventSource(
IELF_HANDLE *LogHandle)
{
- if (!ElfDeleteEventLogHandle(*LogHandle))
- {
- return STATUS_INVALID_HANDLE;
- }
-
- return STATUS_SUCCESS;
+ return ElfDeleteEventLogHandle(*LogHandle);
}
/*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);
}
/*FIXME: Must verify that caller has write access */
- *LogHandle = ElfCreateEventLogHandle(ModuleName->Buffer, TRUE);
-
- return STATUS_SUCCESS;
+ return ElfCreateEventLogHandle((PLOGHANDLE *)LogHandle,
+ ModuleName->Buffer,
+ TRUE);
}
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);
}
/* 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;
}
/* 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;
}
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;
}