19#define EVTLTRACE(fmt, ...) DPRINT("EvtLib: " fmt, ##__VA_ARGS__)
21#define EVTLTRACE1(fmt, ...) DPRINT1("EvtLib: " fmt, ##__VA_ARGS__)
26#define EVENTLOG_FILE_GRANULARITY (64 * 1024)
31 0x11111111, 0x22222222, 0x33333333, 0x44444444,
50 SIZE_T ReadBufLength = 0, OldReadBufLength;
52 ASSERT(LogFile->CurrentSize <= LogFile->Header.MaxSize);
59 NextOffset->QuadPart = 0
LL;
65 Status = LogFile->FileRead(LogFile,
78 OldReadBufLength = ReadBufLength;
88 Status = LogFile->FileRead(LogFile,
99 ReadBufLength += OldReadBufLength;
124 SIZE_T WrittenBufLength = 0, OldWrittenBufLength;
127 ASSERT(!LogFile->ReadOnly);
133 ASSERT(LogFile->CurrentSize <= LogFile->Header.MaxSize);
140 NextOffset->QuadPart = 0
LL;
146 Status = LogFile->FileWrite(LogFile,
159 OldWrittenBufLength = WrittenBufLength;
169 Status = LogFile->FileWrite(LogFile,
180 WrittenBufLength += OldWrittenBufLength;
187 *WrittenLength = WrittenBufLength;
205 for (
i = 0;
i < LogFile->OffsetInfoNext;
i++)
207 if (LogFile->OffsetInfo[
i].EventNumber == RecordNumber)
208 return LogFile->OffsetInfo[
i].EventOffset;
213#define OFFSET_INFO_INCREMENT 64
223 if (LogFile->OffsetInfoNext == LogFile->OffsetInfoSize)
237 if (LogFile->OffsetInfo)
243 LogFile->Free(LogFile->OffsetInfo, 0,
TAG_ELF);
249 LogFile->OffsetInfo[LogFile->OffsetInfoNext].EventNumber = ulNumber;
250 LogFile->OffsetInfo[LogFile->OffsetInfoNext].EventOffset = ulOffset;
251 LogFile->OffsetInfoNext++;
264 if (ulNumberMin > ulNumberMax)
268 while (ulNumberMin <= ulNumberMax)
275 if (ulNumberMin != LogFile->OffsetInfo[0].EventNumber)
283 for (
i = 0;
i < LogFile->OffsetInfoNext - 1;
i++)
285 LogFile->OffsetInfo[
i].EventNumber = LogFile->OffsetInfo[
i + 1].EventNumber;
286 LogFile->OffsetInfo[
i].EventOffset = LogFile->OffsetInfo[
i + 1].EventOffset;
288 LogFile->OffsetInfoNext--;
316 LogFile->Header.MajorVersion =
MAJORVER;
317 LogFile->Header.MinorVersion =
MINORVER;
324 LogFile->Header.CurrentRecordNumber = 1;
326 LogFile->Header.OldestRecordNumber = 0;
334 LogFile->CurrentSize = InitialSize;
335 Status = LogFile->FileSetSize(LogFile, LogFile->CurrentSize,
FileSize);
343 MaxSize =
max(MaxSize, InitialSize);
346 LogFile->Header.Flags = 0;
347 LogFile->Header.Retention = Retention;
352 Status = LogFile->FileWrite(LogFile,
366 EofRec.
EndRecord = LogFile->Header.EndOffset;
370 Status = LogFile->FileWrite(LogFile,
381 Status = LogFile->FileFlush(LogFile,
NULL, 0);
401 ULONG RecordNumber = 0;
412 Status = LogFile->FileRead(LogFile,
424 EVTLTRACE(
"Invalid file `%wZ'.\n", &LogFile->FileName);
433 EVTLTRACE(
"Invalid header size in `%wZ'.\n", &LogFile->FileName);
439 EVTLTRACE(
"Invalid signature %x in `%wZ'.\n",
440 LogFile->Header.Signature, &LogFile->FileName);
447 if (LogFile->ReadOnly && IsLogDirty)
449 EVTLTRACE(
"Read-only log `%wZ' is dirty.\n", &LogFile->FileName);
462 if (LogFile->CurrentSize > LogFile->Header.MaxSize)
463 LogFile->Header.MaxSize = LogFile->CurrentSize;
469 LogFile->Header.Retention = Retention;
479 (LogFile->Header.EndOffset < LogFile->CurrentSize) &&
480 (LogFile->Header.EndOffset & 3) == 0)
483 RecOffset = LogFile->Header.EndOffset;
496 if (Wrapping &&
FileOffset.QuadPart >= RecOffset)
516 EVTLTRACE1(
"Cannot read at most an EOF record!\n");
544 if (
FileOffset.QuadPart >= LogFile->CurrentSize )
571 EVTLTRACE1(
"Cannot read the full EOF record!\n");
579 DPRINT1(
"EOF record %llx is corrupted (0x%x vs. 0x%x ; 0x%x vs. 0x%llx), expected 0x%x 0x%x!\n",
595 if ( (LogFile->Header.StartOffset != EofRec.
BeginRecord) ||
596 (LogFile->Header.EndOffset != EofRec.
EndRecord) ||
601 "Log header or EOF record is corrupted:\n"
602 " StartOffset: 0x%x, expected 0x%x; EndOffset: 0x%x, expected 0x%x;\n"
603 " CurrentRecordNumber: %d, expected %d; OldestRecordNumber: %d, expected %d.\n",
605 LogFile->Header.EndOffset , EofRec.
EndRecord,
614 if (!LogFile->ReadOnly && IsLogDirty)
617 LogFile->Header.EndOffset = EofRec.
EndRecord;
632 if ((LogFile->Header.StartOffset >= LogFile->CurrentSize) ||
633 (LogFile->Header.StartOffset & 3) != 0)
635 EVTLTRACE(
"Invalid start offset 0x%x in `%wZ'.\n",
636 LogFile->Header.StartOffset, &LogFile->FileName);
639 if ((LogFile->Header.EndOffset >= LogFile->CurrentSize) ||
640 (LogFile->Header.EndOffset & 3) != 0)
642 EVTLTRACE(
"Invalid EOF offset 0x%x in `%wZ'.\n",
643 LogFile->Header.EndOffset, &LogFile->FileName);
647 if ((LogFile->Header.StartOffset != LogFile->Header.EndOffset) &&
648 (LogFile->Header.MaxSize - LogFile->Header.StartOffset <
sizeof(
EVENTLOGRECORD)))
654 EVTLTRACE(
"Invalid start offset 0x%x in `%wZ'.\n",
655 LogFile->Header.StartOffset, &LogFile->FileName);
659 if ((LogFile->Header.StartOffset < LogFile->Header.EndOffset) &&
660 (LogFile->Header.EndOffset - LogFile->Header.StartOffset <
sizeof(
EVENTLOGRECORD)))
666 EVTLTRACE(
"Invalid start offset 0x%x or end offset 0x%x in `%wZ'.\n",
667 LogFile->Header.StartOffset, LogFile->Header.EndOffset, &LogFile->FileName);
671 if (LogFile->Header.StartOffset <= LogFile->Header.EndOffset)
677 if (LogFile->Header.MaxSize - LogFile->Header.EndOffset +
680 EVTLTRACE(
"Invalid EOF offset 0x%x in `%wZ'.\n",
681 LogFile->Header.EndOffset, &LogFile->FileName);
691 if (LogFile->Header.StartOffset - LogFile->Header.EndOffset <
sizeof(
EVENTLOGEOF))
693 EVTLTRACE(
"Invalid EOF offset 0x%x in `%wZ'.\n",
694 LogFile->Header.EndOffset, &LogFile->FileName);
700 RecOffset = LogFile->Header.StartOffset;
711 DPRINT(
"StartOffset = 0x%x, EndOffset = 0x%x\n",
712 LogFile->Header.StartOffset, LogFile->Header.EndOffset);
719 if (!LogFile->ReadOnly)
724 DPRINT1(
"Cannot allocate temporary buffer, skip event reorganization.\n");
733 DPRINT1(
"StartOffset = 0x%x, EndOffset = 0x%x\n",
734 LogFile->Header.StartOffset, LogFile->Header.EndOffset);
739 if (Wrapping &&
FileOffset.QuadPart >= RecOffset)
746 Status = LogFile->FileRead(LogFile,
758 DPRINT1(
"Length != sizeof(RecBuf)\n");
806 if (*pRecSize2 != RecBuf.
Length)
808 EVTLTRACE1(
"Invalid RecordSizeEnd of record %d (0x%x) in `%wZ'\n",
809 RecordNumber, *pRecSize2, &LogFile->FileName);
822 EVTLTRACE1(
"ElfpAddOffsetInformation() failed!\n");
829 if (NextOffset.
QuadPart == LogFile->Header.EndOffset)
832 DPRINT(
"NextOffset.QuadPart == LogFile->Header.EndOffset, break\n");
854 DPRINT(
"Wrapping = TRUE;\n");
863 if (RecordNumber != 0 && LogFile->Header.OldestRecordNumber == 0)
864 LogFile->Header.OldestRecordNumber = 1;
866 LogFile->Header.CurrentRecordNumber = RecordNumber + LogFile->Header.OldestRecordNumber;
867 if (LogFile->Header.CurrentRecordNumber == 0)
868 LogFile->Header.CurrentRecordNumber = 1;
871 if (!LogFile->ReadOnly)
915 LogFile->Free =
Free;
916 LogFile->FileSetSize = FileSetSize;
917 LogFile->FileWrite = FileWrite;
918 LogFile->FileRead = FileRead;
919 LogFile->FileFlush = FileFlush;
922 RtlInitEmptyUnicodeString(&LogFile->FileName,
NULL, 0);
926 LogFile->FileName.Buffer = LogFile->Allocate(
FileName->Length,
929 if (LogFile->FileName.Buffer)
931 LogFile->FileName.MaximumLength =
FileName->Length;
939 if (LogFile->OffsetInfo ==
NULL)
946 LogFile->OffsetInfoNext = 0;
955 EVTLTRACE(
"Initializing log file `%wZ'\n", &LogFile->FileName);
967 if (LogFile->OffsetInfo)
968 LogFile->Free(LogFile->OffsetInfo, 0,
TAG_ELF);
970 if (LogFile->FileName.Buffer)
971 LogFile->Free(LogFile->FileName.Buffer, 0,
TAG_ELF);
985 LogFile->CurrentSize,
986 LogFile->Header.MaxSize,
987 LogFile->Header.Retention);
1011 BackupLogFile->FileSetSize = LogFile->FileSetSize;
1012 BackupLogFile->FileWrite = LogFile->FileWrite;
1013 BackupLogFile->FileFlush = LogFile->FileFlush;
1017 BackupLogFile->ReadOnly =
FALSE;
1027 Header->CurrentRecordNumber = 1;
1028 Header->OldestRecordNumber = 0;
1036 Status = BackupLogFile->FileWrite(BackupLogFile,
1043 EVTLTRACE1(
"Failed to write the log file header (Status 0x%08lx)\n",
Status);
1047 for (
i = LogFile->Header.OldestRecordNumber; i < LogFile->
Header.CurrentRecordNumber;
i++)
1055 Status = LogFile->FileRead(LogFile,
1092 Status = BackupLogFile->FileWrite(BackupLogFile,
1121 Status = BackupLogFile->FileWrite(BackupLogFile,
1133 Header->CurrentRecordNumber = LogFile->
Header.CurrentRecordNumber;
1134 Header->OldestRecordNumber = LogFile->
Header.OldestRecordNumber;
1156 if (LogFile->ReadOnly)
1164 LogFile->Header.Flags &= ~ELF_LOGFILE_HEADER_DIRTY;
1168 Status = LogFile->FileWrite(LogFile,
1180 Status = LogFile->FileFlush(LogFile,
NULL, 0);
1201 LogFile->Free(LogFile->OffsetInfo, 0,
TAG_ELF);
1203 if (LogFile->FileName.Buffer)
1204 LogFile->Free(LogFile->FileName.Buffer, 0,
TAG_ELF);
1205 RtlInitEmptyUnicodeString(&LogFile->FileName,
NULL, 0);
1239 Status = LogFile->FileRead(LogFile,
1255 *BytesNeeded = RecSize;
1292 ULONG FreeSpace = 0;
1298 if (LogFile->ReadOnly)
1306 Record->RecordNumber = LogFile->Header.CurrentRecordNumber;
1309 if (LogFile->Header.StartOffset <= LogFile->Header.EndOffset)
1310 FreeSpace = LogFile->Header.MaxSize - LogFile->Header.EndOffset + LogFile->Header.StartOffset -
sizeof(
EVENTLOGHEADER);
1312 FreeSpace = LogFile->Header.StartOffset - LogFile->Header.EndOffset;
1317 if (LogFile->Header.OldestRecordNumber == 0)
1318 LogFile->Header.OldestRecordNumber = 1;
1327 if (LogFile->Header.StartOffset <= LogFile->Header.EndOffset)
1328 UpperBound = LogFile->Header.MaxSize;
1330 UpperBound = LogFile->Header.StartOffset;
1335 EVTLTRACE(
"The event log file has reached maximum size (0x%x), wrapping...\n"
1336 "UpperBound = 0x%x, WriteOffset = 0x%x, BufSize = 0x%x\n",
1341 if ( (LogFile->Header.StartOffset < LogFile->Header.EndOffset) &&
1342 (LogFile->Header.MaxSize -
WriteOffset <
sizeof(RecBuf)) )
1356 UpperBound = LogFile->Header.StartOffset;
1358 FreeSpace = LogFile->Header.StartOffset -
WriteOffset;
1373 ULONG OrgOldestRecordNumber, OldestRecordNumber;
1377 OldestRecordNumber = OrgOldestRecordNumber = LogFile->Header.OldestRecordNumber;
1388 while (FreeSpace <
BufSize +
sizeof(EofRec))
1394 EVTLTRACE1(
"Record number %d cannot be found, or log file is full and cannot wrap!\n", OldestRecordNumber);
1402 Status = LogFile->FileRead(LogFile,
1416 EVTLTRACE1(
"The event log file is corrupted!\n");
1432 if (LogFile->Header.Retention != 0 &&
1437 EVTLTRACE1(
"The event log file is full and cannot wrap because of the retention policy.\n");
1448 OldestRecordNumber++;
1449 RecOffset += RecBuf.
Length;
1450 FreeSpace += RecBuf.
Length;
1457 if (LogFile->Header.MaxSize - RecOffset <
sizeof(
EVENTLOGRECORD))
1460 FreeSpace += LogFile->Header.MaxSize - RecOffset;
1464 EVTLTRACE(
"Record will fit. FreeSpace %d, BufSize %d\n", FreeSpace,
BufSize);
1477 LogFile->Header.OldestRecordNumber = OldestRecordNumber;
1479 if (LogFile->Header.StartOffset == 0)
1490 EVTLTRACE(
"MaxSize = 0x%x, StartOffset = 0x%x, WriteOffset = 0x%x, EndOffset = 0x%x, BufSize = 0x%x\n"
1491 "OldestRecordNumber = %d\n",
1492 LogFile->Header.MaxSize, LogFile->Header.StartOffset,
WriteOffset, LogFile->Header.EndOffset,
BufSize,
1493 OldestRecordNumber);
1502 if (LogFile->CurrentSize < LogFile->Header.MaxSize)
1506 if (WriteOffset < LogFile->
Header.EndOffset ||
NewSize > LogFile->Header.MaxSize)
1507 NewSize = LogFile->Header.MaxSize;
1511 if (
NewSize > LogFile->CurrentSize)
1513 EVTLTRACE1(
"Expanding the log file from %lu to %lu\n",
1514 LogFile->CurrentSize,
NewSize);
1515 Status = LogFile->FileSetSize(LogFile,
NewSize, LogFile->CurrentSize);
1521 LogFile->CurrentSize =
NewSize;
1526 LogFile->Header.Flags &= ~ELF_LOGFILE_LOGFULL_WRITTEN;
1530 if (WriteOffset < LogFile->
Header.EndOffset)
1533 WrittenLength =
ROUND_DOWN(LogFile->Header.MaxSize - LogFile->Header.EndOffset,
sizeof(
ULONG));
1537 Status = LogFile->FileWrite(LogFile,
1572 LogFile->Header.CurrentRecordNumber++;
1573 if (LogFile->Header.CurrentRecordNumber == 0)
1574 LogFile->Header.CurrentRecordNumber = 1;
1581 LogFile->Header.EndOffset =
FileOffset.QuadPart;
1585 EofRec.
EndRecord = LogFile->Header.EndOffset;
1620 return LogFile->Header.OldestRecordNumber;
1629 return LogFile->Header.CurrentRecordNumber;
1638 return LogFile->Header.Flags;
1654 DbgPrint(
"CurrentRecordNumber = %lu\n",
Header->CurrentRecordNumber);
1655 DbgPrint(
"OldestRecordNumber = %lu\n",
Header->OldestRecordNumber);
1662 DbgPrint(
"ELF_LOGFILE_HEADER_DIRTY");
1663 Flags &= ~ELF_LOGFILE_HEADER_DIRTY;
1668 DbgPrint(
"ELF_LOGFILE_HEADER_WRAP");
1669 Flags &= ~ELF_LOGFILE_HEADER_WRAP;
1674 DbgPrint(
"ELF_LOGFILE_LOGFULL_WRITTEN");
1675 Flags &= ~ELF_LOGFILE_LOGFULL_WRITTEN;
1680 DbgPrint(
"ELF_LOGFILE_ARCHIVE_SET");
1681 Flags &= ~ELF_LOGFILE_ARCHIVE_SET;
_In_ PATA_DEVICE_REQUEST _In_ BOOLEAN Allocate
_In_ PFCB _In_ LONGLONG FileOffset
#define NT_SUCCESS(StatCode)
#define RtlCompareMemory(s1, s2, l)
#define ROUND_UP(n, align)
#define ROUND_DOWN(n, align)
#define EVTLTRACE(fmt,...)
static const EVENTLOGEOF EOFRecord
NTSTATUS NTAPI ElfReCreateFile(IN PEVTLOGFILE LogFile)
VOID NTAPI ElfCloseFile(IN PEVTLOGFILE LogFile)
static BOOL ElfpAddOffsetInformation(IN PEVTLOGFILE LogFile, IN ULONG ulNumber, IN ULONG ulOffset)
static ULONG ElfpOffsetByNumber(IN PEVTLOGFILE LogFile, IN ULONG RecordNumber)
static NTSTATUS ElfpInitNewFile(IN PEVTLOGFILE LogFile, IN ULONG FileSize, IN ULONG MaxSize, IN ULONG Retention)
#define EVENTLOG_FILE_GRANULARITY
static NTSTATUS ElfpInitExistingFile(IN PEVTLOGFILE LogFile, IN ULONG FileSize, IN ULONG Retention)
static BOOL ElfpDeleteOffsetInformation(IN PEVTLOGFILE LogFile, IN ULONG ulNumberMin, IN ULONG ulNumberMax)
NTSTATUS NTAPI ElfWriteRecord(IN PEVTLOGFILE LogFile, IN PEVENTLOGRECORD Record, IN SIZE_T BufSize)
static NTSTATUS ReadLogBuffer(IN PEVTLOGFILE LogFile, OUT PVOID Buffer, IN SIZE_T Length, OUT PSIZE_T ReadLength OPTIONAL, IN PLARGE_INTEGER ByteOffset, OUT PLARGE_INTEGER NextOffset OPTIONAL)
ULONG NTAPI ElfGetOldestRecord(IN PEVTLOGFILE LogFile)
NTSTATUS NTAPI ElfFlushFile(IN PEVTLOGFILE LogFile)
NTSTATUS NTAPI ElfCreateFile(IN OUT PEVTLOGFILE LogFile, IN PUNICODE_STRING FileName OPTIONAL, IN ULONG FileSize, IN ULONG MaxSize, IN ULONG Retention, IN BOOLEAN CreateNew, IN BOOLEAN ReadOnly, IN PELF_ALLOCATE_ROUTINE Allocate, IN PELF_FREE_ROUTINE Free, IN PELF_FILE_SET_SIZE_ROUTINE FileSetSize, IN PELF_FILE_WRITE_ROUTINE FileWrite, IN PELF_FILE_READ_ROUTINE FileRead, IN PELF_FILE_FLUSH_ROUTINE FileFlush)
static NTSTATUS WriteLogBuffer(IN PEVTLOGFILE LogFile, IN PVOID Buffer, IN SIZE_T Length, OUT PSIZE_T WrittenLength OPTIONAL, IN PLARGE_INTEGER ByteOffset, OUT PLARGE_INTEGER NextOffset OPTIONAL)
NTSTATUS NTAPI ElfBackupFile(IN PEVTLOGFILE LogFile, IN PEVTLOGFILE BackupLogFile)
#define OFFSET_INFO_INCREMENT
ULONG NTAPI ElfGetCurrentRecord(IN PEVTLOGFILE LogFile)
ULONG NTAPI ElfGetFlags(IN PEVTLOGFILE LogFile)
NTSTATUS NTAPI ElfReadRecord(IN PEVTLOGFILE LogFile, IN ULONG RecordNumber, OUT PEVENTLOGRECORD Record, IN SIZE_T BufSize, OUT PSIZE_T BytesRead OPTIONAL, OUT PSIZE_T BytesNeeded OPTIONAL)
#define EVTLTRACE1(fmt,...)
NTSTATUS(NTAPI * PELF_FILE_FLUSH_ROUTINE)(IN struct _EVTLOGFILE *LogFile, IN PLARGE_INTEGER FileOffset, IN ULONG Length)
#define ELF_LOGFILE_ARCHIVE_SET
PVOID(NTAPI * PELF_ALLOCATE_ROUTINE)(IN SIZE_T Size, IN ULONG Flags, IN ULONG Tag)
#define ELF_LOGFILE_LOGFULL_WRITTEN
VOID(NTAPI * PELF_FREE_ROUTINE)(IN PVOID Ptr, IN ULONG Flags, IN ULONG Tag)
struct _EVENT_OFFSET_INFO * PEVENT_OFFSET_INFO
#define ELF_LOGFILE_HEADER_WRAP
NTSTATUS(NTAPI * PELF_FILE_SET_SIZE_ROUTINE)(IN struct _EVTLOGFILE *LogFile, IN ULONG FileSize, IN ULONG OldFileSize)
#define LOGFILE_SIGNATURE
#define ELF_LOGFILE_HEADER_DIRTY
struct _EVENTLOGHEADER EVENTLOGHEADER
NTSTATUS(NTAPI * PELF_FILE_READ_ROUTINE)(IN struct _EVTLOGFILE *LogFile, IN PLARGE_INTEGER FileOffset, OUT PVOID Buffer, IN SIZE_T Length, OUT PSIZE_T ReadLength OPTIONAL)
#define EVENTLOGEOF_SIZE_FIXED
NTSTATUS(NTAPI * PELF_FILE_WRITE_ROUTINE)(IN struct _EVTLOGFILE *LogFile, IN PLARGE_INTEGER FileOffset, IN PVOID Buffer, IN SIZE_T Length, OUT PSIZE_T WrittenLength OPTIONAL)
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
_Must_inspect_result_ _In_ USHORT NewSize
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define RtlFillMemoryUlong(dst, len, val)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define STATUS_LOG_FILE_FULL
#define STATUS_EVENTLOG_FILE_CORRUPT
#define STATUS_BUFFER_TOO_SMALL
PULONG MinorVersion OPTIONAL
ULONG CurrentRecordNumber
ULONG RecordSizeBeginning
FSRTL_ADVANCED_FCB_HEADER Header
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
_Must_inspect_result_ _In_ WDFUSBPIPE _In_ WDFREQUEST _In_opt_ WDFMEMORY _In_opt_ PWDFMEMORY_OFFSET WriteOffset
_Must_inspect_result_ _In_ ULONG Flags
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD * Record