83 lines
1.8 KiB
C
83 lines
1.8 KiB
C
/*!
|
|
@file WinLogger.h
|
|
|
|
@brief Windows specific implementation of the logger.
|
|
|
|
@author Satoshi Tanda
|
|
|
|
@copyright Copyright (c) 2020 - , Satoshi Tanda. All rights reserved.
|
|
*/
|
|
#pragma once
|
|
#include "../../Logger.h"
|
|
|
|
//
|
|
// The handy macros to specify in which section the code should be placed.
|
|
//
|
|
#define LOGGER_INIT __declspec(code_seg("INIT"))
|
|
#define LOGGER_PAGED __declspec(code_seg("PAGE"))
|
|
|
|
//
|
|
// Extended configuration flags.
|
|
//
|
|
typedef union _LOGGER_CONFIGURATION_FLAGS
|
|
{
|
|
struct
|
|
{
|
|
UINT32 EnableTimestamp : 1;
|
|
UINT32 EnableLevel : 1;
|
|
UINT32 EnableProcessorNumber : 1;
|
|
UINT32 EnablePidTid : 1;
|
|
UINT32 EnableProcessName : 1;
|
|
UINT32 EnableFunctionName : 1;
|
|
} u;
|
|
|
|
UINT32 AsUInt32;
|
|
} LOGGER_CONFIGURATION_FLAGS;
|
|
|
|
//
|
|
// The configurations of the logger to initialize.
|
|
//
|
|
typedef struct _LOGGER_CONFIGURATION
|
|
{
|
|
//
|
|
// The maximum level of the log this logger will log. For example, the
|
|
// information-level logs are discarded when LogLevelWarning is specified.
|
|
// If LogLevelNone is set, the logger is disabled and none of logs are logged.
|
|
//
|
|
LOG_LEVEL Level;
|
|
|
|
//
|
|
// Extended configuration flags.
|
|
//
|
|
LOGGER_CONFIGURATION_FLAGS Flags;
|
|
|
|
//
|
|
// An interval to flush logs saved into log message buffer.
|
|
//
|
|
UINT32 FlushIntervalInMs;
|
|
|
|
//
|
|
// A size of log message buffer. The logger internally allocates two buffers
|
|
// with this size.
|
|
//
|
|
SIZE_T BufferSize;
|
|
|
|
//
|
|
// The path to the file to save logs. The logger do not save logs into a file
|
|
// when NULL is specified.
|
|
//
|
|
PCWSTR FilePath;
|
|
} LOGGER_CONFIGURATION;
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
InitializeLogger (
|
|
_In_ CONST LOGGER_CONFIGURATION* Configuration
|
|
);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
VOID
|
|
CleanupLogger (
|
|
);
|