mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
[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:
parent
597c140370
commit
775cef8b4c
2 changed files with 33 additions and 37 deletions
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue