91 lines
2 KiB
C
91 lines
2 KiB
C
/*++
|
||
|
||
Copyright (c) 1992 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
errorlog.c
|
||
|
||
Abstract:
|
||
|
||
This module implements the error logging in the server.
|
||
|
||
!!! This module must be nonpageable.
|
||
|
||
Author:
|
||
|
||
Jameel Hyder (microsoft!jameelh)
|
||
|
||
Revision History:
|
||
10 Jun 1992 Initial Version
|
||
|
||
--*/
|
||
|
||
#define FILENUM FILE_ERRORLOG
|
||
#include <afp.h>
|
||
|
||
VOID
|
||
AfpWriteErrorLogEntry(
|
||
IN ULONG EventCode, // message number
|
||
IN LONG UniqueErrorCode OPTIONAL,
|
||
IN NTSTATUS NtStatusCode,
|
||
IN PVOID RawDataBuf OPTIONAL,
|
||
IN LONG RawDataLen,
|
||
IN PUNICODE_STRING pInsertionString OPTIONAL
|
||
)
|
||
{
|
||
|
||
PIO_ERROR_LOG_PACKET ErrorLogEntry;
|
||
LONG InsertionStringLength = 0;
|
||
|
||
#ifdef STOP_ON_ERRORS
|
||
DBGBRK(DBG_LEVEL_ERR);
|
||
#endif
|
||
|
||
if (ARGUMENT_PRESENT(pInsertionString))
|
||
{
|
||
InsertionStringLength = pInsertionString->Length;
|
||
}
|
||
|
||
ErrorLogEntry =
|
||
(PIO_ERROR_LOG_PACKET)IoAllocateErrorLogEntry(AfpDeviceObject,
|
||
(UCHAR)(sizeof(IO_ERROR_LOG_PACKET) + RawDataLen + InsertionStringLength));
|
||
|
||
if (ErrorLogEntry != NULL)
|
||
{
|
||
// Fill in the Error log entry
|
||
|
||
ErrorLogEntry->ErrorCode = EventCode;
|
||
ErrorLogEntry->MajorFunctionCode = 0;
|
||
ErrorLogEntry->RetryCount = 0;
|
||
ErrorLogEntry->UniqueErrorValue = (ULONG)UniqueErrorCode;
|
||
ErrorLogEntry->FinalStatus = NtStatusCode;
|
||
ErrorLogEntry->IoControlCode = 0;
|
||
ErrorLogEntry->DeviceOffset.LowPart = 0;
|
||
ErrorLogEntry->DeviceOffset.HighPart = 0;
|
||
ErrorLogEntry->DumpDataSize = (USHORT)RawDataLen;
|
||
ErrorLogEntry->StringOffset =
|
||
(USHORT)(FIELD_OFFSET(IO_ERROR_LOG_PACKET, DumpData) + RawDataLen);
|
||
ErrorLogEntry->NumberOfStrings = (ARGUMENT_PRESENT(pInsertionString)) ? 1 : 0;
|
||
ErrorLogEntry->SequenceNumber = 0;
|
||
|
||
if (ARGUMENT_PRESENT(RawDataBuf))
|
||
{
|
||
RtlCopyMemory(ErrorLogEntry->DumpData, RawDataBuf, RawDataLen);
|
||
}
|
||
|
||
if (ARGUMENT_PRESENT(pInsertionString))
|
||
{
|
||
RtlCopyMemory((PCHAR)ErrorLogEntry->DumpData + RawDataLen,
|
||
pInsertionString->Buffer,
|
||
pInsertionString->Length);
|
||
}
|
||
|
||
// Write the entry
|
||
IoWriteErrorLogEntry(ErrorLogEntry);
|
||
}
|
||
|
||
INTERLOCKED_INCREMENT_LONG( &AfpServerStatistics.stat_Errors );
|
||
}
|
||
|
||
|