- Implement internal function LogfDeleteOffsetInformation.
[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 BOOL LogfDeleteOffsetInformation(PLOGFILE LogFile,
153 ULONG ulNumber);
154
155 PBYTE LogfAllocAndBuildNewRecord(LPDWORD lpRecSize,
156 DWORD dwRecordNumber,
157 WORD wType,
158 WORD wCategory,
159 DWORD dwEventId,
160 LPCWSTR SourceName,
161 LPCWSTR ComputerName,
162 DWORD dwSidLength,
163 PSID lpUserSid,
164 WORD wNumStrings,
165 WCHAR * lpStrings,
166 DWORD dwDataSize,
167 LPVOID lpRawData);
168
169 /* eventlog.c */
170 extern HANDLE MyHeap;
171
172 VOID PRINT_HEADER(PEVENTLOGHEADER header);
173
174 VOID PRINT_RECORD(PEVENTLOGRECORD pRec);
175
176 VOID EventTimeToSystemTime(DWORD EventTime,
177 SYSTEMTIME * SystemTime);
178
179 VOID SystemTimeToEventTime(SYSTEMTIME * pSystemTime,
180 DWORD * pEventTime);
181
182 /* logport.c */
183 NTSTATUS WINAPI PortThreadRoutine(PVOID Param);
184
185 NTSTATUS InitLogPort(VOID);
186
187 NTSTATUS ProcessPortMessage(VOID);
188
189 /* rpc.c */
190 DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter);
191
192 static __inline void LogfFreeRecord(LPVOID Rec)
193 {
194 HeapFree(MyHeap, 0, Rec);
195 }
196
197 #endif /* __EVENTLOG_H__ */