[EVENTLOG]

LogfInitializeExisting: Do not try to write to a file that has been opened as a backup file. It has been opened read-only.

svn path=/trunk/; revision=61026
This commit is contained in:
Eric Kohl 2013-11-17 22:30:55 +00:00
parent d8cadc59dc
commit 7a6fccdcf6

View file

@ -82,7 +82,7 @@ LogfInitializeNew(PLOGFILE LogFile)
static NTSTATUS static NTSTATUS
LogfInitializeExisting(PLOGFILE LogFile) LogfInitializeExisting(PLOGFILE LogFile, BOOL Backup)
{ {
DWORD dwRead; DWORD dwRead;
DWORD dwRecordsNumber = 0; DWORD dwRecordsNumber = 0;
@ -264,27 +264,30 @@ LogfInitializeExisting(PLOGFILE LogFile)
But for now limit EventLog size to just under 5K. */ But for now limit EventLog size to just under 5K. */
LogFile->Header.MaxSize = 5000; LogFile->Header.MaxSize = 5000;
if (SetFilePointer(LogFile->hFile, 0, NULL, FILE_BEGIN) == if (!Backup)
INVALID_SET_FILE_POINTER)
{ {
DPRINT1("SetFilePointer() failed! %d\n", GetLastError()); if (SetFilePointer(LogFile->hFile, 0, NULL, FILE_BEGIN) ==
return STATUS_EVENTLOG_FILE_CORRUPT; INVALID_SET_FILE_POINTER)
} {
DPRINT1("SetFilePointer() failed! %d\n", GetLastError());
return STATUS_EVENTLOG_FILE_CORRUPT;
}
if (!WriteFile(LogFile->hFile, if (!WriteFile(LogFile->hFile,
&LogFile->Header, &LogFile->Header,
sizeof(EVENTLOGHEADER), sizeof(EVENTLOGHEADER),
&dwRead, &dwRead,
NULL)) NULL))
{ {
DPRINT1("WriteFile failed! %d\n", GetLastError()); DPRINT1("WriteFile failed! %d\n", GetLastError());
return STATUS_EVENTLOG_FILE_CORRUPT; 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 STATUS_EVENTLOG_FILE_CORRUPT; return STATUS_EVENTLOG_FILE_CORRUPT;
}
} }
return STATUS_SUCCESS; return STATUS_SUCCESS;
@ -380,7 +383,7 @@ LogfCreate(PLOGFILE *LogFile,
if (bCreateNew) if (bCreateNew)
Status = LogfInitializeNew(pLogFile); Status = LogfInitializeNew(pLogFile);
else else
Status = LogfInitializeExisting(pLogFile); Status = LogfInitializeExisting(pLogFile, Backup);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
goto fail; goto fail;