Merge trunk head (r41474)
[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 _EVENTSOURCE
95 {
96 LIST_ENTRY EventSourceListEntry;
97 PLOGFILE LogFile;
98 ULONG CurrentRecord;
99 WCHAR szName[1];
100 } EVENTSOURCE, *PEVENTSOURCE;
101
102 /* file.c */
103 VOID LogfListInitialize(VOID);
104
105 PLOGFILE LogfListHead(VOID);
106
107 INT LogfListItemCount(VOID);
108
109 PLOGFILE LogfListItemByIndex(INT Index);
110
111 PLOGFILE LogfListItemByName(WCHAR * Name);
112
113 INT LogfListItemIndexByName(WCHAR * Name);
114
115 VOID LogfListAddItem(PLOGFILE Item);
116
117 VOID LogfListRemoveItem(PLOGFILE Item);
118
119 DWORD LogfReadEvent(PLOGFILE LogFile,
120 DWORD Flags,
121 DWORD * RecordNumber,
122 DWORD BufSize,
123 PBYTE Buffer,
124 DWORD * BytesRead,
125 DWORD * BytesNeeded);
126
127 BOOL LogfWriteData(PLOGFILE LogFile,
128 DWORD BufSize,
129 PBYTE Buffer);
130
131 PLOGFILE LogfCreate(WCHAR * LogName,
132 WCHAR * FileName);
133
134 VOID LogfClose(PLOGFILE LogFile);
135
136 VOID LogfCloseAll(VOID);
137
138 BOOL LogfInitializeNew(PLOGFILE LogFile);
139
140 BOOL LogfInitializeExisting(PLOGFILE LogFile);
141
142 DWORD LogfGetOldestRecord(PLOGFILE LogFile);
143
144 DWORD LogfGetCurrentRecord(PLOGFILE LogFile);
145
146 ULONG LogfOffsetByNumber(PLOGFILE LogFile,
147 DWORD RecordNumber);
148
149 BOOL LogfAddOffsetInformation(PLOGFILE LogFile,
150 ULONG ulNumber,
151 ULONG ulOffset);
152
153 BOOL LogfDeleteOffsetInformation(PLOGFILE LogFile,
154 ULONG ulNumber);
155
156 PBYTE LogfAllocAndBuildNewRecord(LPDWORD lpRecSize,
157 DWORD dwRecordNumber,
158 WORD wType,
159 WORD wCategory,
160 DWORD dwEventId,
161 LPCWSTR SourceName,
162 LPCWSTR ComputerName,
163 DWORD dwSidLength,
164 PSID lpUserSid,
165 WORD wNumStrings,
166 WCHAR * lpStrings,
167 DWORD dwDataSize,
168 LPVOID lpRawData);
169
170 /* eventlog.c */
171 extern HANDLE MyHeap;
172
173 VOID PRINT_HEADER(PEVENTLOGHEADER header);
174
175 VOID PRINT_RECORD(PEVENTLOGRECORD pRec);
176
177 VOID EventTimeToSystemTime(DWORD EventTime,
178 SYSTEMTIME * SystemTime);
179
180 VOID SystemTimeToEventTime(SYSTEMTIME * pSystemTime,
181 DWORD * pEventTime);
182
183 /* logport.c */
184 NTSTATUS WINAPI PortThreadRoutine(PVOID Param);
185
186 NTSTATUS InitLogPort(VOID);
187
188 NTSTATUS ProcessPortMessage(VOID);
189
190 /* rpc.c */
191 DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter);
192
193 static __inline void LogfFreeRecord(LPVOID Rec)
194 {
195 HeapFree(MyHeap, 0, Rec);
196 }
197
198 #endif /* __EVENTLOG_H__ */