- eventlog.h: Add CurrentRecord to EventSource struct as each EventLog handle must...
[reactos.git] / reactos / base / services / eventlog / eventlog.h
1 /*
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
7 */
8
9 #ifndef __EVENTLOG_H__
10 #define __EVENTLOG_H__
11
12 #define NDEBUG
13 #define WIN32_NO_STATUS
14
15 #include <windows.h>
16 #include <lpctypes.h>
17 #include <lpcfuncs.h>
18 #include <rtlfuncs.h>
19 #include <obfuncs.h>
20 #include <iotypes.h>
21 #include <debug.h>
22 #include "eventlogrpc_s.h"
23
24 typedef struct _IO_ERROR_LPC
25 {
26 PORT_MESSAGE Header;
27 IO_ERROR_LOG_MESSAGE Message;
28 } IO_ERROR_LPC, *PIO_ERROR_LPC;
29
30 #define MAJORVER 1
31 #define MINORVER 1
32
33 /*
34 * Our file format will be compatible with NT's
35 */
36 #define LOGFILE_SIGNATURE 0x654c664c
37
38 /*
39 * Flags used in logfile header
40 */
41 #define ELF_LOGFILE_HEADER_DIRTY 1
42 #define ELF_LOGFILE_HEADER_WRAP 2
43 #define ELF_LOGGFILE_LOGFULL_WRITTEN 4
44 #define ELF_LOGFILE_ARCHIVE_SET 8
45
46 /* FIXME: MSDN reads that the following two structs are in winnt.h. Are they? */
47 typedef struct _EVENTLOGHEADER {
48 ULONG HeaderSize;
49 ULONG Signature;
50 ULONG MajorVersion;
51 ULONG MinorVersion;
52 ULONG StartOffset;
53 ULONG EndOffset;
54 ULONG CurrentRecordNumber;
55 ULONG OldestRecordNumber;
56 ULONG MaxSize;
57 ULONG Flags;
58 ULONG Retention;
59 ULONG EndHeaderSize;
60 } EVENTLOGHEADER, *PEVENTLOGHEADER;
61
62 typedef struct _EVENTLOGEOF {
63 ULONG RecordSizeBeginning;
64 ULONG Ones;
65 ULONG Twos;
66 ULONG Threes;
67 ULONG Fours;
68 ULONG BeginRecord;
69 ULONG EndRecord;
70 ULONG CurrentRecordNumber;
71 ULONG OldestRecordNumber;
72 ULONG RecordSizeEnd;
73 } EVENTLOGEOF, *PEVENTLOGEOF;
74
75 typedef struct
76 {
77 ULONG EventNumber;
78 ULONG EventOffset;
79 } EVENT_OFFSET_INFO, *PEVENT_OFFSET_INFO;
80
81 typedef struct
82 {
83 HANDLE hFile;
84 EVENTLOGHEADER Header;
85 WCHAR *LogName;
86 WCHAR *FileName;
87 CRITICAL_SECTION cs;
88 PEVENT_OFFSET_INFO OffsetInfo;
89 ULONG OffsetInfoSize;
90 ULONG OffsetInfoNext;
91 LIST_ENTRY ListEntry;
92 } LOGFILE, *PLOGFILE;
93
94 typedef struct
95 {
96 PLOGFILE LogFile;
97 ULONG CurrentRecord;
98 WCHAR *Name;
99 } EVENTSOURCE, *PEVENTSOURCE;
100
101 /* file.c */
102 VOID LogfListInitialize(VOID);
103
104 PLOGFILE LogfListHead(VOID);
105
106 INT LogfListItemCount(VOID);
107
108 PLOGFILE LogfListItemByIndex(INT Index);
109
110 PLOGFILE LogfListItemByName(WCHAR * Name);
111
112 INT LogfListItemIndexByName(WCHAR * Name);
113
114 VOID LogfListAddItem(PLOGFILE Item);
115
116 VOID LogfListRemoveItem(PLOGFILE Item);
117
118 DWORD LogfReadEvent(PLOGFILE LogFile,
119 DWORD Flags,
120 DWORD * RecordNumber,
121 DWORD BufSize,
122 PBYTE Buffer,
123 DWORD * BytesRead,
124 DWORD * BytesNeeded);
125
126 BOOL LogfWriteData(PLOGFILE LogFile,
127 DWORD BufSize,
128 PBYTE Buffer);
129
130 PLOGFILE LogfCreate(WCHAR * LogName,
131 WCHAR * FileName);
132
133 VOID LogfClose(PLOGFILE LogFile);
134
135 VOID LogfCloseAll(VOID);
136
137 BOOL LogfInitializeNew(PLOGFILE LogFile);
138
139 BOOL LogfInitializeExisting(PLOGFILE LogFile);
140
141 DWORD LogfGetOldestRecord(PLOGFILE LogFile);
142
143 DWORD LogfGetCurrentRecord(PLOGFILE LogFile);
144
145 ULONG LogfOffsetByNumber(PLOGFILE LogFile,
146 DWORD RecordNumber);
147
148 BOOL LogfAddOffsetInformation(PLOGFILE LogFile,
149 ULONG ulNumber,
150 ULONG ulOffset);
151
152 PBYTE LogfAllocAndBuildNewRecord(LPDWORD lpRecSize,
153 DWORD dwRecordNumber,
154 WORD wType,
155 WORD wCategory,
156 DWORD dwEventId,
157 LPCWSTR SourceName,
158 LPCWSTR ComputerName,
159 DWORD dwSidLength,
160 PSID lpUserSid,
161 WORD wNumStrings,
162 WCHAR * lpStrings,
163 DWORD dwDataSize,
164 LPVOID lpRawData);
165
166 /* eventlog.c */
167 extern HANDLE MyHeap;
168
169 VOID PRINT_HEADER(PEVENTLOGHEADER header);
170
171 VOID PRINT_RECORD(PEVENTLOGRECORD pRec);
172
173 VOID EventTimeToSystemTime(DWORD EventTime,
174 SYSTEMTIME * SystemTime);
175
176 VOID SystemTimeToEventTime(SYSTEMTIME * pSystemTime,
177 DWORD * pEventTime);
178
179 /* logport.c */
180 NTSTATUS WINAPI PortThreadRoutine(PVOID Param);
181
182 NTSTATUS InitLogPort(VOID);
183
184 NTSTATUS ProcessPortMessage(VOID);
185
186 /* rpc.c */
187 DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter);
188
189 static __inline void LogfFreeRecord(LPVOID Rec)
190 {
191 HeapFree(MyHeap, 0, Rec);
192 }
193
194 #endif /* __EVENTLOG_H__ */