Merging r37048, r37051, r37052, r37055 from the-real-msvc branch
[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
98 /* file.c */
99 VOID LogfListInitialize(VOID);
100
101 PLOGFILE LogfListHead(VOID);
102
103 INT LogfListItemCount(VOID);
104
105 PLOGFILE LogfListItemByIndex(INT Index);
106
107 PLOGFILE LogfListItemByName(WCHAR * Name);
108
109 INT LogfListItemIndexByName(WCHAR * Name);
110
111 VOID LogfListAddItem(PLOGFILE Item);
112
113 VOID LogfListRemoveItem(PLOGFILE Item);
114
115 BOOL LogfReadEvent(PLOGFILE LogFile,
116 DWORD Flags,
117 DWORD RecordNumber,
118 DWORD BufSize,
119 PBYTE Buffer,
120 DWORD * BytesRead,
121 DWORD * BytesNeeded);
122
123 BOOL LogfWriteData(PLOGFILE LogFile,
124 DWORD BufSize,
125 PBYTE Buffer);
126
127 PLOGFILE LogfCreate(WCHAR * LogName,
128 WCHAR * FileName);
129
130 VOID LogfClose(PLOGFILE LogFile);
131
132 VOID LogfCloseAll(VOID);
133
134 BOOL LogfInitializeNew(PLOGFILE LogFile);
135
136 BOOL LogfInitializeExisting(PLOGFILE LogFile);
137
138 DWORD LogfGetOldestRecord(PLOGFILE LogFile);
139
140 ULONG LogfOffsetByNumber(PLOGFILE LogFile,
141 DWORD RecordNumber);
142
143 BOOL LogfAddOffsetInformation(PLOGFILE LogFile,
144 ULONG ulNumber,
145 ULONG ulOffset);
146
147 PBYTE LogfAllocAndBuildNewRecord(LPDWORD lpRecSize,
148 DWORD dwRecordNumber,
149 WORD wType,
150 WORD wCategory,
151 DWORD dwEventId,
152 LPCWSTR SourceName,
153 LPCWSTR ComputerName,
154 DWORD dwSidLength,
155 PSID lpUserSid,
156 WORD wNumStrings,
157 WCHAR * lpStrings,
158 DWORD dwDataSize,
159 LPVOID lpRawData);
160
161 void __inline LogfFreeRecord(LPVOID Rec);
162
163 /* eventlog.c */
164 VOID PRINT_HEADER(PFILE_HEADER header);
165
166 VOID PRINT_RECORD(PEVENTLOGRECORD pRec);
167
168 VOID EventTimeToSystemTime(DWORD EventTime,
169 SYSTEMTIME * SystemTime);
170
171 VOID SystemTimeToEventTime(SYSTEMTIME * pSystemTime,
172 DWORD * pEventTime);
173
174 /* logport.c */
175 NTSTATUS STDCALL PortThreadRoutine(PVOID Param);
176
177 NTSTATUS InitLogPort(VOID);
178
179 NTSTATUS ProcessPortMessage(VOID);
180
181 /* rpc.c */
182 DWORD STDCALL RpcThreadRoutine(LPVOID lpParameter);
183
184 #endif /* __EVENTLOG_H__ */