[EVENTLOG]

- Change LogfInitializeNew and LogfInitializeExisting to return an NTSTATUS code instead of a BOOL value.
- LogfInitializeExisting no longer calls LogfInitializeNew when reading a log file fails but returns a proper status code instead.

svn path=/trunk/; revision=55406
This commit is contained in:
Eric Kohl 2012-02-04 11:34:13 +00:00
parent 597c140370
commit 775cef8b4c
2 changed files with 33 additions and 37 deletions

View file

@ -168,10 +168,6 @@ LogfClose(PLOGFILE LogFile,
VOID LogfCloseAll(VOID); VOID LogfCloseAll(VOID);
BOOL LogfInitializeNew(PLOGFILE LogFile);
BOOL LogfInitializeExisting(PLOGFILE LogFile);
DWORD LogfGetOldestRecord(PLOGFILE LogFile); DWORD LogfGetOldestRecord(PLOGFILE LogFile);
DWORD LogfGetCurrentRecord(PLOGFILE LogFile); DWORD LogfGetCurrentRecord(PLOGFILE LogFile);

View file

@ -18,7 +18,8 @@ static CRITICAL_SECTION LogFileListCs;
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
BOOL LogfInitializeNew(PLOGFILE LogFile) static NTSTATUS
LogfInitializeNew(PLOGFILE LogFile)
{ {
DWORD dwWritten; DWORD dwWritten;
EVENTLOGEOF EofRec; EVENTLOGEOF EofRec;
@ -46,7 +47,7 @@ BOOL LogfInitializeNew(PLOGFILE LogFile)
NULL)) NULL))
{ {
DPRINT1("WriteFile failed:%d!\n", GetLastError()); DPRINT1("WriteFile failed:%d!\n", GetLastError());
return FALSE; return STATUS_UNSUCCESSFUL;
} }
EofRec.Ones = 0x11111111; EofRec.Ones = 0x11111111;
@ -67,19 +68,21 @@ BOOL LogfInitializeNew(PLOGFILE LogFile)
NULL)) NULL))
{ {
DPRINT1("WriteFile failed:%d!\n", GetLastError()); DPRINT1("WriteFile failed:%d!\n", GetLastError());
return FALSE; return STATUS_UNSUCCESSFUL;
} }
if (!FlushFileBuffers(LogFile->hFile)) if (!FlushFileBuffers(LogFile->hFile))
{ {
DPRINT1("FlushFileBuffers failed:%d!\n", GetLastError()); DPRINT1("FlushFileBuffers failed:%d!\n", GetLastError());
return FALSE; return STATUS_UNSUCCESSFUL;
} }
return TRUE; return STATUS_SUCCESS;
} }
BOOL LogfInitializeExisting(PLOGFILE LogFile)
static NTSTATUS
LogfInitializeExisting(PLOGFILE LogFile)
{ {
DWORD dwRead; DWORD dwRead;
DWORD dwRecordsNumber = 0; DWORD dwRecordsNumber = 0;
@ -94,7 +97,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
INVALID_SET_FILE_POINTER) INVALID_SET_FILE_POINTER)
{ {
DPRINT1("SetFilePointer failed! %d\n", GetLastError()); DPRINT1("SetFilePointer failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (!ReadFile(LogFile->hFile, if (!ReadFile(LogFile->hFile,
@ -104,34 +107,34 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
NULL)) NULL))
{ {
DPRINT1("ReadFile failed! %d\n", GetLastError()); DPRINT1("ReadFile failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (dwRead != sizeof(EVENTLOGHEADER)) if (dwRead != sizeof(EVENTLOGHEADER))
{ {
DPRINT("EventLog: Invalid file %S.\n", LogFile->FileName); DPRINT("EventLog: Invalid file %S.\n", LogFile->FileName);
return LogfInitializeNew(LogFile); return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (LogFile->Header.HeaderSize != sizeof(EVENTLOGHEADER) || if (LogFile->Header.HeaderSize != sizeof(EVENTLOGHEADER) ||
LogFile->Header.EndHeaderSize != sizeof(EVENTLOGHEADER)) LogFile->Header.EndHeaderSize != sizeof(EVENTLOGHEADER))
{ {
DPRINT("EventLog: Invalid header size in %S.\n", LogFile->FileName); DPRINT("EventLog: Invalid header size in %S.\n", LogFile->FileName);
return LogfInitializeNew(LogFile); return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (LogFile->Header.Signature != LOGFILE_SIGNATURE) if (LogFile->Header.Signature != LOGFILE_SIGNATURE)
{ {
DPRINT("EventLog: Invalid signature %x in %S.\n", DPRINT("EventLog: Invalid signature %x in %S.\n",
LogFile->Header.Signature, LogFile->FileName); LogFile->Header.Signature, LogFile->FileName);
return LogfInitializeNew(LogFile); return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (LogFile->Header.EndOffset > GetFileSize(LogFile->hFile, NULL) + 1) if (LogFile->Header.EndOffset > GetFileSize(LogFile->hFile, NULL) + 1)
{ {
DPRINT("EventLog: Invalid eof offset %x in %S.\n", DPRINT("EventLog: Invalid eof offset %x in %S.\n",
LogFile->Header.EndOffset, LogFile->FileName); LogFile->Header.EndOffset, LogFile->FileName);
return LogfInitializeNew(LogFile); return STATUS_EVENTLOG_FILE_CORRUPT;
} }
/* Set the read location to the oldest record */ /* Set the read location to the oldest record */
@ -139,7 +142,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
if (dwFilePointer == INVALID_SET_FILE_POINTER) if (dwFilePointer == INVALID_SET_FILE_POINTER)
{ {
DPRINT1("SetFilePointer failed! %d\n", GetLastError()); DPRINT1("SetFilePointer failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
for (;;) for (;;)
@ -149,7 +152,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
if (dwFilePointer == INVALID_SET_FILE_POINTER) if (dwFilePointer == INVALID_SET_FILE_POINTER)
{ {
DPRINT1("SetFilePointer failed! %d\n", GetLastError()); DPRINT1("SetFilePointer failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
/* If the EVENTLOGEOF info has been reached and the oldest record was not immediately after the Header */ /* If the EVENTLOGEOF info has been reached and the oldest record was not immediately after the Header */
@ -167,7 +170,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
NULL)) NULL))
{ {
DPRINT1("ReadFile failed! %d\n", GetLastError()); DPRINT1("ReadFile failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (dwRead != sizeof(dwRecSize)) if (dwRead != sizeof(dwRecSize))
@ -180,7 +183,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
NULL)) NULL))
{ {
DPRINT1("ReadFile() failed! %d\n", GetLastError()); DPRINT1("ReadFile() failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (dwRead != sizeof(dwRecSize)) if (dwRead != sizeof(dwRecSize))
@ -199,22 +202,21 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
FILE_CURRENT) == INVALID_SET_FILE_POINTER) FILE_CURRENT) == INVALID_SET_FILE_POINTER)
{ {
DPRINT1("SetFilePointer() failed! %d", GetLastError()); DPRINT1("SetFilePointer() failed! %d", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
RecBuf = (PEVENTLOGRECORD) HeapAlloc(MyHeap, 0, dwRecSize); RecBuf = (PEVENTLOGRECORD) HeapAlloc(MyHeap, 0, dwRecSize);
if (RecBuf == NULL)
if (!RecBuf)
{ {
DPRINT1("Can't allocate heap!\n"); DPRINT1("Can't allocate heap!\n");
return FALSE; return STATUS_NO_MEMORY;
} }
if (!ReadFile(LogFile->hFile, RecBuf, dwRecSize, &dwRead, NULL)) if (!ReadFile(LogFile->hFile, RecBuf, dwRecSize, &dwRead, NULL))
{ {
DPRINT1("ReadFile() failed! %d\n", GetLastError()); DPRINT1("ReadFile() failed! %d\n", GetLastError());
HeapFree(MyHeap, 0, RecBuf); HeapFree(MyHeap, 0, RecBuf);
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (dwRead != dwRecSize) if (dwRead != dwRecSize)
@ -248,7 +250,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
{ {
DPRINT1("LogfAddOffsetInformation() failed!\n"); DPRINT1("LogfAddOffsetInformation() failed!\n");
HeapFree(MyHeap, 0, RecBuf); HeapFree(MyHeap, 0, RecBuf);
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
HeapFree(MyHeap, 0, RecBuf); HeapFree(MyHeap, 0, RecBuf);
@ -266,7 +268,7 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
INVALID_SET_FILE_POINTER) INVALID_SET_FILE_POINTER)
{ {
DPRINT1("SetFilePointer() failed! %d\n", GetLastError()); DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (!WriteFile(LogFile->hFile, if (!WriteFile(LogFile->hFile,
@ -276,16 +278,16 @@ BOOL LogfInitializeExisting(PLOGFILE LogFile)
NULL)) NULL))
{ {
DPRINT1("WriteFile failed! %d\n", GetLastError()); DPRINT1("WriteFile failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
if (!FlushFileBuffers(LogFile->hFile)) if (!FlushFileBuffers(LogFile->hFile))
{ {
DPRINT1("FlushFileBuffers failed! %d\n", GetLastError()); DPRINT1("FlushFileBuffers failed! %d\n", GetLastError());
return FALSE; return STATUS_EVENTLOG_FILE_CORRUPT;
} }
return TRUE; return STATUS_SUCCESS;
} }
@ -299,7 +301,7 @@ LogfCreate(PLOGFILE *LogFile,
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
PLOGFILE pLogFile; PLOGFILE pLogFile;
BOOL bResult, bCreateNew = FALSE; BOOL bCreateNew = FALSE;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
pLogFile = (LOGFILE *) HeapAlloc(MyHeap, HEAP_ZERO_MEMORY, sizeof(LOGFILE)); pLogFile = (LOGFILE *) HeapAlloc(MyHeap, HEAP_ZERO_MEMORY, sizeof(LOGFILE));
@ -376,15 +378,12 @@ LogfCreate(PLOGFILE *LogFile,
pLogFile->Permanent = Permanent; pLogFile->Permanent = Permanent;
if (bCreateNew) if (bCreateNew)
bResult = LogfInitializeNew(pLogFile); Status = LogfInitializeNew(pLogFile);
else else
bResult = LogfInitializeExisting(pLogFile); Status = LogfInitializeExisting(pLogFile);
if (!bResult) if (!NT_SUCCESS(Status))
{
Status = STATUS_UNSUCCESSFUL;
goto fail; goto fail;
}
RtlInitializeResource(&pLogFile->Lock); RtlInitializeResource(&pLogFile->Lock);
@ -415,6 +414,7 @@ LogfCreate(PLOGFILE *LogFile,
return Status; return Status;
} }
VOID VOID
LogfClose(PLOGFILE LogFile, LogfClose(PLOGFILE LogFile,
BOOL ForceClose) BOOL ForceClose)