2 * PROJECT: ReactOS kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/services/eventlog/eventlog.h
5 * PURPOSE: Event logging service
6 * COPYRIGHT: Copyright 2005 Saveliy Tretiakov
10 #define __EVENTLOG_H__
14 /* PSDK/NDK Headers */
15 #define WIN32_NO_STATUS
19 #define NTOS_MODE_USER
20 #include <ndk/rtlfuncs.h>
21 #include <ndk/obfuncs.h>
23 #define ROUND_DOWN(n, align) (((ULONG)n) & ~((align) - 1l))
24 #define ROUND_UP(n, align) ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
26 #include <eventlogrpc_s.h>
29 typedef struct _IO_ERROR_LPC
32 IO_ERROR_LOG_MESSAGE Message
;
33 } IO_ERROR_LPC
, *PIO_ERROR_LPC
;
37 * Our file format will be compatible with NT's
41 #define LOGFILE_SIGNATURE 0x654c664c
44 * Flags used in logfile header
46 #define ELF_LOGFILE_HEADER_DIRTY 1
47 #define ELF_LOGFILE_HEADER_WRAP 2
48 #define ELF_LOGFILE_LOGFULL_WRITTEN 4
49 #define ELF_LOGFILE_ARCHIVE_SET 8
51 /* FIXME: MSDN reads that the following two structs are in winnt.h. Are they? */
52 typedef struct _EVENTLOGHEADER
60 ULONG CurrentRecordNumber
;
61 ULONG OldestRecordNumber
;
66 } EVENTLOGHEADER
, *PEVENTLOGHEADER
;
68 typedef struct _EVENTLOGEOF
70 ULONG RecordSizeBeginning
;
77 ULONG CurrentRecordNumber
;
78 ULONG OldestRecordNumber
;
80 } EVENTLOGEOF
, *PEVENTLOGEOF
;
82 typedef struct _EVENT_OFFSET_INFO
86 } EVENT_OFFSET_INFO
, *PEVENT_OFFSET_INFO
;
88 typedef struct _LOGFILE
91 EVENTLOGHEADER Header
;
95 PEVENT_OFFSET_INFO OffsetInfo
;
100 } LOGFILE
, *PLOGFILE
;
102 typedef struct _EVENTSOURCE
104 LIST_ENTRY EventSourceListEntry
;
107 } EVENTSOURCE
, *PEVENTSOURCE
;
110 /* Log Handle Flags */
111 #define LOG_HANDLE_BACKUP_FILE 1
113 typedef struct _LOGHANDLE
115 LIST_ENTRY LogHandleListEntry
;
116 PEVENTSOURCE EventSource
;
121 } LOGHANDLE
, *PLOGHANDLE
;
125 extern HANDLE MyHeap
;
126 extern PEVENTSOURCE EventLogSource
;
128 VOID
PRINT_HEADER(PEVENTLOGHEADER header
);
129 VOID
PRINT_RECORD(PEVENTLOGRECORD pRec
);
133 VOID
InitEventSourceList(VOID
);
136 LoadEventSources(HKEY hKey
,
140 GetEventSourceByName(LPCWSTR Name
);
144 VOID
LogfListInitialize(VOID
);
146 DWORD
LogfListItemCount(VOID
);
148 PLOGFILE
LogfListItemByIndex(DWORD Index
);
150 PLOGFILE
LogfListItemByName(LPCWSTR Name
);
152 // DWORD LogfListItemIndexByName(WCHAR * Name);
156 DWORD
LogfReadEvent(PLOGFILE LogFile
,
158 DWORD
* RecordNumber
,
165 BOOL
LogfWriteData(PLOGFILE LogFile
,
170 LogfClearFile(PLOGFILE LogFile
,
171 PUNICODE_STRING BackupFileName
);
174 LogfBackupFile(PLOGFILE LogFile
,
175 PUNICODE_STRING BackupFileName
);
178 LogfCreate(PLOGFILE
*Logfile
,
180 PUNICODE_STRING FileName
,
187 LogfClose(PLOGFILE LogFile
,
190 VOID
LogfCloseAll(VOID
);
192 DWORD
LogfGetOldestRecord(PLOGFILE LogFile
);
194 DWORD
LogfGetCurrentRecord(PLOGFILE LogFile
);
197 LogfAllocAndBuildNewRecord(PULONG lpRecSize
,
198 ULONG dwRecordNumber
, // FIXME!
211 static __inline
void LogfFreeRecord(LPVOID Rec
)
213 HeapFree(MyHeap
, 0, Rec
);
217 LogfReportEvent(USHORT wType
,
227 NTSTATUS WINAPI
PortThreadRoutine(PVOID Param
);
229 NTSTATUS
InitLogPort(VOID
);
231 NTSTATUS
ProcessPortMessage(VOID
);
234 DWORD WINAPI
RpcThreadRoutine(LPVOID lpParameter
);
236 #endif /* __EVENTLOG_H__ */