mirror of
https://github.com/reactos/reactos.git
synced 2025-03-30 17:10:22 +00:00
[EVTLIB]: Allow specifying a memory allocation tag when freeing the allocated buffers (functionality similar to the Ex**WithTag kernel functions).
[EVENTLOG]: Use the previous functionality; use also the internal LogfpAlloc() / LogfpFree() functions when dealing with buffers related to event log files. svn path=/trunk/; revision=75527
This commit is contained in:
parent
bfac984256
commit
e7fb5e7c33
4 changed files with 36 additions and 34 deletions
|
@ -142,7 +142,7 @@ LogfAllocAndBuildNewRecord(PSIZE_T pRecSize,
|
||||||
|
|
||||||
static __inline void LogfFreeRecord(PEVENTLOGRECORD Record)
|
static __inline void LogfFreeRecord(PEVENTLOGRECORD Record)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, Record);
|
RtlFreeHeap(GetProcessHeap(), 0, Record);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
|
@ -167,8 +167,10 @@ LogfpAlloc(IN SIZE_T Size,
|
||||||
static
|
static
|
||||||
VOID NTAPI
|
VOID NTAPI
|
||||||
LogfpFree(IN PVOID Ptr,
|
LogfpFree(IN PVOID Ptr,
|
||||||
IN ULONG Flags)
|
IN ULONG Flags,
|
||||||
|
IN ULONG Tag)
|
||||||
{
|
{
|
||||||
|
UNREFERENCED_PARAMETER(Tag);
|
||||||
RtlFreeHeap(GetProcessHeap(), Flags, Ptr);
|
RtlFreeHeap(GetProcessHeap(), Flags, Ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,7 +307,7 @@ LogfCreate(PLOGFILE* LogFile,
|
||||||
SIZE_T LogNameLen;
|
SIZE_T LogNameLen;
|
||||||
BOOLEAN CreateNew;
|
BOOLEAN CreateNew;
|
||||||
|
|
||||||
pLogFile = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pLogFile));
|
pLogFile = LogfpAlloc(sizeof(*pLogFile), HEAP_ZERO_MEMORY, TAG_ELF);
|
||||||
if (!pLogFile)
|
if (!pLogFile)
|
||||||
{
|
{
|
||||||
DPRINT1("Cannot allocate heap!\n");
|
DPRINT1("Cannot allocate heap!\n");
|
||||||
|
@ -313,9 +315,7 @@ LogfCreate(PLOGFILE* LogFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
LogNameLen = (LogName ? wcslen(LogName) : 0) + 1;
|
LogNameLen = (LogName ? wcslen(LogName) : 0) + 1;
|
||||||
pLogFile->LogName = RtlAllocateHeap(GetProcessHeap(),
|
pLogFile->LogName = LogfpAlloc(LogNameLen * sizeof(WCHAR), HEAP_ZERO_MEMORY, 0);
|
||||||
HEAP_ZERO_MEMORY,
|
|
||||||
LogNameLen * sizeof(WCHAR));
|
|
||||||
if (pLogFile->LogName == NULL)
|
if (pLogFile->LogName == NULL)
|
||||||
{
|
{
|
||||||
DPRINT1("Cannot allocate heap\n");
|
DPRINT1("Cannot allocate heap\n");
|
||||||
|
@ -412,9 +412,9 @@ Quit:
|
||||||
NtClose(pLogFile->FileHandle);
|
NtClose(pLogFile->FileHandle);
|
||||||
|
|
||||||
if (pLogFile->LogName)
|
if (pLogFile->LogName)
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, pLogFile->LogName);
|
LogfpFree(pLogFile->LogName, 0, 0);
|
||||||
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, pLogFile);
|
LogfpFree(pLogFile, 0, TAG_ELF);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -440,11 +440,11 @@ LogfClose(PLOGFILE LogFile,
|
||||||
|
|
||||||
ElfCloseFile(&LogFile->LogFile);
|
ElfCloseFile(&LogFile->LogFile);
|
||||||
NtClose(LogFile->FileHandle);
|
NtClose(LogFile->FileHandle);
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, LogFile->LogName);
|
LogfpFree(LogFile->LogName, 0, 0);
|
||||||
|
|
||||||
RtlDeleteResource(&LogFile->Lock);
|
RtlDeleteResource(&LogFile->Lock);
|
||||||
|
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, LogFile);
|
LogfpFree(LogFile, 0, TAG_ELF);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -583,7 +583,7 @@ ReadRecord(IN PEVTLOGFILE LogFile,
|
||||||
if (BytesNeeded)
|
if (BytesNeeded)
|
||||||
*BytesNeeded = 0;
|
*BytesNeeded = 0;
|
||||||
|
|
||||||
UnicodeBuffer = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, BufSize);
|
UnicodeBuffer = LogfpAlloc(BufSize, HEAP_ZERO_MEMORY, TAG_ELF_BUF);
|
||||||
if (UnicodeBuffer == NULL)
|
if (UnicodeBuffer == NULL)
|
||||||
{
|
{
|
||||||
DPRINT1("Alloc failed!\n");
|
DPRINT1("Alloc failed!\n");
|
||||||
|
@ -705,7 +705,7 @@ ReadRecord(IN PEVTLOGFILE LogFile,
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
Quit:
|
Quit:
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, UnicodeBuffer);
|
LogfpFree(UnicodeBuffer, 0, TAG_ELF_BUF);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* PROJECT: ReactOS EventLog File Library
|
* PROJECT: ReactOS EventLog File Library
|
||||||
* LICENSE: GPL - See COPYING in the top level directory
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
* FILE: sdk/lib/evtlib/evtlib.c
|
* FILE: sdk/lib/evtlib/evtlib.c
|
||||||
* PURPOSE: Provides a library for reading and writing EventLog files
|
* PURPOSE: Provides functionality for reading and writing
|
||||||
* in the NT <= 5.2 (.evt) format.
|
* EventLog files in the NT <= 5.2 (.evt) format.
|
||||||
* PROGRAMMERS: Copyright 2005 Saveliy Tretiakov
|
* PROGRAMMERS: Copyright 2005 Saveliy Tretiakov
|
||||||
* Michael Martin
|
* Michael Martin
|
||||||
* Hermes Belusca-Maito
|
* Hermes Belusca-Maito
|
||||||
|
@ -238,7 +238,7 @@ ElfpAddOffsetInformation(
|
||||||
RtlCopyMemory(NewOffsetInfo,
|
RtlCopyMemory(NewOffsetInfo,
|
||||||
LogFile->OffsetInfo,
|
LogFile->OffsetInfo,
|
||||||
LogFile->OffsetInfoSize * sizeof(EVENT_OFFSET_INFO));
|
LogFile->OffsetInfoSize * sizeof(EVENT_OFFSET_INFO));
|
||||||
LogFile->Free(LogFile->OffsetInfo, 0);
|
LogFile->Free(LogFile->OffsetInfo, 0, TAG_ELF);
|
||||||
}
|
}
|
||||||
LogFile->OffsetInfo = (PEVENT_OFFSET_INFO)NewOffsetInfo;
|
LogFile->OffsetInfo = (PEVENT_OFFSET_INFO)NewOffsetInfo;
|
||||||
LogFile->OffsetInfoSize += OFFSET_INFO_INCREMENT;
|
LogFile->OffsetInfoSize += OFFSET_INFO_INCREMENT;
|
||||||
|
@ -771,20 +771,20 @@ Continue:
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
EVTLTRACE1("ReadLogBuffer failed (Status 0x%08lx)\n", Status);
|
EVTLTRACE1("ReadLogBuffer failed (Status 0x%08lx)\n", Status);
|
||||||
LogFile->Free(pRecBuf, 0);
|
LogFile->Free(pRecBuf, 0, TAG_ELF_BUF);
|
||||||
return STATUS_EVENTLOG_FILE_CORRUPT;
|
return STATUS_EVENTLOG_FILE_CORRUPT;
|
||||||
}
|
}
|
||||||
if (ReadLength != RecBuf.Length)
|
if (ReadLength != RecBuf.Length)
|
||||||
{
|
{
|
||||||
DPRINT1("Oh oh!!\n");
|
DPRINT1("Oh oh!!\n");
|
||||||
LogFile->Free(pRecBuf, 0);
|
LogFile->Free(pRecBuf, 0, TAG_ELF_BUF);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// /* If OverWrittenRecords is TRUE and this record has already been read */
|
// /* If OverWrittenRecords is TRUE and this record has already been read */
|
||||||
// if (OverWrittenRecords && (pRecBuf->RecordNumber == LogFile->Header.OldestRecordNumber))
|
// if (OverWrittenRecords && (pRecBuf->RecordNumber == LogFile->Header.OldestRecordNumber))
|
||||||
// {
|
// {
|
||||||
// LogFile->Free(pRecBuf, 0);
|
// LogFile->Free(pRecBuf, 0, TAG_ELF_BUF);
|
||||||
// break;
|
// break;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -794,7 +794,7 @@ Continue:
|
||||||
{
|
{
|
||||||
EVTLTRACE1("Invalid RecordSizeEnd of record %d (0x%x) in `%wZ'\n",
|
EVTLTRACE1("Invalid RecordSizeEnd of record %d (0x%x) in `%wZ'\n",
|
||||||
RecordNumber, *pRecSize2, &LogFile->FileName);
|
RecordNumber, *pRecSize2, &LogFile->FileName);
|
||||||
LogFile->Free(pRecBuf, 0);
|
LogFile->Free(pRecBuf, 0, TAG_ELF_BUF);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,11 +807,11 @@ Continue:
|
||||||
FileOffset.QuadPart))
|
FileOffset.QuadPart))
|
||||||
{
|
{
|
||||||
EVTLTRACE1("ElfpAddOffsetInformation() failed!\n");
|
EVTLTRACE1("ElfpAddOffsetInformation() failed!\n");
|
||||||
LogFile->Free(pRecBuf, 0);
|
LogFile->Free(pRecBuf, 0, TAG_ELF_BUF);
|
||||||
return STATUS_EVENTLOG_FILE_CORRUPT;
|
return STATUS_EVENTLOG_FILE_CORRUPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogFile->Free(pRecBuf, 0);
|
LogFile->Free(pRecBuf, 0, TAG_ELF_BUF);
|
||||||
|
|
||||||
if (NextOffset.QuadPart == LogFile->Header.EndOffset)
|
if (NextOffset.QuadPart == LogFile->Header.EndOffset)
|
||||||
{
|
{
|
||||||
|
@ -874,7 +874,7 @@ Continue:
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
ElfCreateFile(
|
ElfCreateFile(
|
||||||
IN PEVTLOGFILE LogFile,
|
IN OUT PEVTLOGFILE LogFile,
|
||||||
IN PUNICODE_STRING FileName OPTIONAL,
|
IN PUNICODE_STRING FileName OPTIONAL,
|
||||||
IN ULONG FileSize,
|
IN ULONG FileSize,
|
||||||
IN ULONG MaxSize,
|
IN ULONG MaxSize,
|
||||||
|
@ -952,14 +952,13 @@ Quit:
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (LogFile->OffsetInfo)
|
if (LogFile->OffsetInfo)
|
||||||
LogFile->Free(LogFile->OffsetInfo, 0);
|
LogFile->Free(LogFile->OffsetInfo, 0, TAG_ELF);
|
||||||
|
|
||||||
if (LogFile->FileName.Buffer)
|
if (LogFile->FileName.Buffer)
|
||||||
LogFile->Free(LogFile->FileName.Buffer, 0);
|
LogFile->Free(LogFile->FileName.Buffer, 0, TAG_ELF);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -1071,7 +1070,7 @@ ElfBackupFile(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
EVTLTRACE1("ReadLogBuffer failed (Status 0x%08lx)\n", Status);
|
EVTLTRACE1("ReadLogBuffer failed (Status 0x%08lx)\n", Status);
|
||||||
LogFile->Free(Buffer, 0);
|
LogFile->Free(Buffer, 0, TAG_ELF_BUF);
|
||||||
// Status = STATUS_EVENTLOG_FILE_CORRUPT;
|
// Status = STATUS_EVENTLOG_FILE_CORRUPT;
|
||||||
goto Quit;
|
goto Quit;
|
||||||
}
|
}
|
||||||
|
@ -1085,7 +1084,7 @@ ElfBackupFile(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
EVTLTRACE1("FileWrite() failed (Status 0x%08lx)\n", Status);
|
EVTLTRACE1("FileWrite() failed (Status 0x%08lx)\n", Status);
|
||||||
LogFile->Free(Buffer, 0);
|
LogFile->Free(Buffer, 0, TAG_ELF_BUF);
|
||||||
goto Quit;
|
goto Quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1093,7 +1092,7 @@ ElfBackupFile(
|
||||||
Header->EndOffset += RecBuf.Length;
|
Header->EndOffset += RecBuf.Length;
|
||||||
|
|
||||||
/* Free the buffer */
|
/* Free the buffer */
|
||||||
LogFile->Free(Buffer, 0);
|
LogFile->Free(Buffer, 0, TAG_ELF_BUF);
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1186,10 +1185,10 @@ ElfCloseFile( // ElfFree
|
||||||
ElfFlushFile(LogFile);
|
ElfFlushFile(LogFile);
|
||||||
|
|
||||||
/* Free the data */
|
/* Free the data */
|
||||||
LogFile->Free(LogFile->OffsetInfo, 0);
|
LogFile->Free(LogFile->OffsetInfo, 0, TAG_ELF);
|
||||||
|
|
||||||
if (LogFile->FileName.Buffer)
|
if (LogFile->FileName.Buffer)
|
||||||
LogFile->Free(LogFile->FileName.Buffer, 0);
|
LogFile->Free(LogFile->FileName.Buffer, 0, TAG_ELF);
|
||||||
RtlInitEmptyUnicodeString(&LogFile->FileName, NULL, 0);
|
RtlInitEmptyUnicodeString(&LogFile->FileName, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* PROJECT: ReactOS EventLog File Library
|
* PROJECT: ReactOS EventLog File Library
|
||||||
* LICENSE: GPL - See COPYING in the top level directory
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
* FILE: sdk/lib/evtlib/evtlib.h
|
* FILE: sdk/lib/evtlib/evtlib.h
|
||||||
* PURPOSE: Provides a library for reading and writing EventLog files
|
* PURPOSE: Provides functionality for reading and writing
|
||||||
* in the NT <= 5.2 (.evt) format.
|
* EventLog files in the NT <= 5.2 (.evt) format.
|
||||||
* PROGRAMMERS: Copyright 2005 Saveliy Tretiakov
|
* PROGRAMMERS: Copyright 2005 Saveliy Tretiakov
|
||||||
* Michael Martin
|
* Michael Martin
|
||||||
* Hermes Belusca-Maito
|
* Hermes Belusca-Maito
|
||||||
|
@ -12,6 +12,8 @@
|
||||||
#ifndef __EVTLIB_H__
|
#ifndef __EVTLIB_H__
|
||||||
#define __EVTLIB_H__
|
#define __EVTLIB_H__
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
/* PSDK/NDK Headers */
|
/* PSDK/NDK Headers */
|
||||||
// #define WIN32_NO_STATUS
|
// #define WIN32_NO_STATUS
|
||||||
// #include <windef.h>
|
// #include <windef.h>
|
||||||
|
@ -157,7 +159,8 @@ typedef PVOID
|
||||||
typedef VOID
|
typedef VOID
|
||||||
(NTAPI *PELF_FREE_ROUTINE)(
|
(NTAPI *PELF_FREE_ROUTINE)(
|
||||||
IN PVOID Ptr,
|
IN PVOID Ptr,
|
||||||
IN ULONG Flags
|
IN ULONG Flags,
|
||||||
|
IN ULONG Tag
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef NTSTATUS
|
typedef NTSTATUS
|
||||||
|
@ -214,7 +217,7 @@ typedef struct _EVTLOGFILE
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
ElfCreateFile(
|
ElfCreateFile(
|
||||||
IN PEVTLOGFILE LogFile,
|
IN OUT PEVTLOGFILE LogFile,
|
||||||
IN PUNICODE_STRING FileName OPTIONAL,
|
IN PUNICODE_STRING FileName OPTIONAL,
|
||||||
IN ULONG FileSize,
|
IN ULONG FileSize,
|
||||||
IN ULONG MaxSize,
|
IN ULONG MaxSize,
|
||||||
|
|
Loading…
Reference in a new issue