- Added EventSource structure for keeping track of EventLog Source name and associate...
[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 <pseh/pseh.h>
23 #include "eventlogrpc_s.h"
24
25 typedef struct _IO_ERROR_LPC
26 {
27 PORT_MESSAGE Header;
28 IO_ERROR_LOG_MESSAGE Message;
29 } IO_ERROR_LPC, *PIO_ERROR_LPC;
30
31 #define MAJORVER 1
32 #define MINORVER 1
33
34 /*
35 * Our file format will be compatible with NT's
36 */
37 #define LOGFILE_SIGNATURE 0x654c664c
38
39 /*
40 * FIXME
41 * Flags used in logfile header
42 */
43 #define LOGFILE_FLAG1 1
44 #define LOGFILE_FLAG2 2
45 #define LOGFILE_FLAG3 4
46 #define LOGFILE_FLAG4 8
47
48 typedef struct
49 {
50 DWORD SizeOfHeader;
51 DWORD Signature;
52 DWORD MajorVersion;
53 DWORD MinorVersion;
54 DWORD FirstRecordOffset;
55 DWORD EofOffset;
56 DWORD NextRecord;
57 DWORD OldestRecord;
58 DWORD unknown1;
59 DWORD Flags;
60 DWORD unknown2;
61 DWORD SizeOfHeader2;
62 } FILE_HEADER, *PFILE_HEADER;
63
64 typedef struct
65 {
66 DWORD Size1;
67 DWORD Ones; // Must be 0x11111111
68 DWORD Twos; // Must be 0x22222222
69 DWORD Threes; // Must be 0x33333333
70 DWORD Fours; // Must be 0x44444444
71 DWORD StartOffset;
72 DWORD EndOffset;
73 DWORD NextRecordNumber;
74 DWORD OldestRecordNumber;
75 DWORD Size2;
76 } EOF_RECORD, *PEOF_RECORD;
77
78 typedef struct
79 {
80 ULONG EventNumber;
81 ULONG EventOffset;
82 } EVENT_OFFSET_INFO, *PEVENT_OFFSET_INFO;
83
84 typedef struct
85 {
86 HANDLE hFile;
87 FILE_HEADER Header;
88 WCHAR *LogName;
89 WCHAR *FileName;
90 CRITICAL_SECTION cs;
91 PEVENT_OFFSET_INFO OffsetInfo;
92 ULONG OffsetInfoSize;
93 ULONG OffsetInfoNext;
94 LIST_ENTRY ListEntry;
95 } LOGFILE, *PLOGFILE;
96
97 typedef struct
98 {
99 PLOGFILE LogFile;
100 WCHAR *Name;
101 } EVENTSOURCE, *PEVENTSOURCE;
102
103 /* file.c */
104 VOID LogfListInitialize(VOID);
105
106 PLOGFILE LogfListHead(VOID);
107
108 INT LogfListItemCount(VOID);
109
110 PLOGFILE LogfListItemByIndex(INT Index);
111
112 PLOGFILE LogfListItemByName(WCHAR * Name);
113
114 INT LogfListItemIndexByName(WCHAR * Name);
115
116 VOID LogfListAddItem(PLOGFILE Item);
117
118 VOID LogfListRemoveItem(PLOGFILE Item);
119
120 BOOL LogfReadEvent(PLOGFILE LogFile,
121 DWORD Flags,
122 DWORD RecordNumber,
123 DWORD BufSize,
124 PBYTE Buffer,
125 DWORD * BytesRead,
126 DWORD * BytesNeeded);
127
128 BOOL LogfWriteData(PLOGFILE LogFile,
129 DWORD BufSize,
130 PBYTE Buffer);
131
132 PLOGFILE LogfCreate(WCHAR * LogName,
133 WCHAR * FileName);
134
135 VOID LogfClose(PLOGFILE LogFile);
136
137 VOID LogfCloseAll(VOID);
138
139 BOOL LogfInitializeNew(PLOGFILE LogFile);
140
141 BOOL LogfInitializeExisting(PLOGFILE LogFile);
142
143 DWORD LogfGetOldestRecord(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 void __inline LogfFreeRecord(LPVOID Rec);
167
168 /* eventlog.c */
169 VOID PRINT_HEADER(PFILE_HEADER 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 STDCALL PortThreadRoutine(PVOID Param);
181
182 NTSTATUS InitLogPort(VOID);
183
184 NTSTATUS ProcessPortMessage(VOID);
185
186 /* rpc.c */
187 DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter);
188
189 #endif /* __EVENTLOG_H__ */