2 * PROJECT: ReactOS kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: services/eventlog/eventlog.h
5 * PURPOSE: Event logging service
6 * COPYRIGHT: Copyright 2005 Saveliy Tretiakov
10 #define __EVENTLOG_H__
13 #define WIN32_NO_STATUS
23 #include "eventlogrpc_s.h"
25 typedef struct _IO_ERROR_LPC
28 IO_ERROR_LOG_MESSAGE Message
;
29 } IO_ERROR_LPC
, *PIO_ERROR_LPC
;
35 * Our file format will be compatible with NT's
37 #define LOGFILE_SIGNATURE 0x654c664c
40 * Flags used in logfile header
42 #define ELF_LOGFILE_HEADER_DIRTY 1
43 #define ELF_LOGFILE_HEADER_WRAP 2
44 #define ELF_LOGGFILE_LOGFULL_WRITTEN 4
45 #define ELF_LOGFILE_ARCHIVE_SET 8
47 /* FIXME: MSDN reads that the following two structs are in winnt.h. Are they? */
48 typedef struct _EVENTLOGHEADER
56 ULONG CurrentRecordNumber
;
57 ULONG OldestRecordNumber
;
62 } EVENTLOGHEADER
, *PEVENTLOGHEADER
;
64 typedef struct _EVENTLOGEOF
66 ULONG RecordSizeBeginning
;
73 ULONG CurrentRecordNumber
;
74 ULONG OldestRecordNumber
;
76 } EVENTLOGEOF
, *PEVENTLOGEOF
;
78 typedef struct _EVENT_OFFSET_INFO
82 } EVENT_OFFSET_INFO
, *PEVENT_OFFSET_INFO
;
84 typedef struct _LOGFILE
87 EVENTLOGHEADER Header
;
91 PEVENT_OFFSET_INFO OffsetInfo
;
97 typedef struct _EVENTSOURCE
99 LIST_ENTRY EventSourceListEntry
;
102 } EVENTSOURCE
, *PEVENTSOURCE
;
104 typedef struct _LOGHANDLE
106 LIST_ENTRY LogHandleListEntry
;
107 PEVENTSOURCE EventSource
;
111 } LOGHANDLE
, *PLOGHANDLE
;
114 VOID
LogfListInitialize(VOID
);
116 PLOGFILE
LogfListHead(VOID
);
118 INT
LogfListItemCount(VOID
);
120 PLOGFILE
LogfListItemByIndex(INT Index
);
122 PLOGFILE
LogfListItemByName(WCHAR
* Name
);
124 INT
LogfListItemIndexByName(WCHAR
* Name
);
126 VOID
LogfListAddItem(PLOGFILE Item
);
128 VOID
LogfListRemoveItem(PLOGFILE Item
);
130 DWORD
LogfReadEvent(PLOGFILE LogFile
,
132 DWORD
* RecordNumber
,
136 DWORD
* BytesNeeded
);
138 BOOL
LogfWriteData(PLOGFILE LogFile
,
142 PLOGFILE
LogfCreate(WCHAR
* LogName
,
145 VOID
LogfClose(PLOGFILE LogFile
);
147 VOID
LogfCloseAll(VOID
);
149 BOOL
LogfInitializeNew(PLOGFILE LogFile
);
151 BOOL
LogfInitializeExisting(PLOGFILE LogFile
);
153 DWORD
LogfGetOldestRecord(PLOGFILE LogFile
);
155 DWORD
LogfGetCurrentRecord(PLOGFILE LogFile
);
157 ULONG
LogfOffsetByNumber(PLOGFILE LogFile
,
160 BOOL
LogfAddOffsetInformation(PLOGFILE LogFile
,
164 BOOL
LogfDeleteOffsetInformation(PLOGFILE LogFile
,
167 PBYTE
LogfAllocAndBuildNewRecord(LPDWORD lpRecSize
,
168 DWORD dwRecordNumber
,
173 LPCWSTR ComputerName
,
182 LogfReportEvent(WORD wType
,
187 extern HANDLE MyHeap
;
189 VOID
PRINT_HEADER(PEVENTLOGHEADER header
);
191 VOID
PRINT_RECORD(PEVENTLOGRECORD pRec
);
193 VOID
EventTimeToSystemTime(DWORD EventTime
,
194 SYSTEMTIME
* SystemTime
);
196 VOID
SystemTimeToEventTime(SYSTEMTIME
* pSystemTime
,
200 VOID
InitEventSourceList(VOID
);
203 LoadEventSources(HKEY hKey
,
207 GetEventSourceByName(LPCWSTR Name
);
211 NTSTATUS WINAPI
PortThreadRoutine(PVOID Param
);
213 NTSTATUS
InitLogPort(VOID
);
215 NTSTATUS
ProcessPortMessage(VOID
);
218 DWORD WINAPI
RpcThreadRoutine(LPVOID lpParameter
);
220 static __inline
void LogfFreeRecord(LPVOID Rec
)
222 HeapFree(MyHeap
, 0, Rec
);
225 #endif /* __EVENTLOG_H__ */