[CSR]
[reactos.git] / reactos / include / reactos / subsys / csr / server.h
1 /*
2 * PROJECT: ReactOS Native Headers
3 * FILE: include/subsys/csr/server.h
4 * PURPOSE: Public Definitions for CSR Servers
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
6 */
7 #ifndef _CSRSERVER_H
8 #define _CSRSERVER_H
9
10 #ifdef _MSC_VER
11 #pragma warning(push)
12 #pragma warning (disable:4201)
13 #endif
14
15 /* DEPENDENCIES **************************************************************/
16
17 /* TYPES **********************************************************************/
18 typedef struct _CSR_NT_SESSION
19 {
20 ULONG ReferenceCount;
21 LIST_ENTRY SessionLink;
22 ULONG SessionId;
23 } CSR_NT_SESSION, *PCSR_NT_SESSION;
24
25 typedef struct _CSR_PROCESS
26 {
27 CLIENT_ID ClientId;
28 LIST_ENTRY ListLink;
29 LIST_ENTRY ThreadList;
30 struct _CSR_PROCESS *Parent;
31 PCSR_NT_SESSION NtSession;
32 ULONG ExpectedVersion;
33 HANDLE ClientPort;
34 ULONG_PTR ClientViewBase;
35 ULONG_PTR ClientViewBounds;
36 HANDLE ProcessHandle;
37 ULONG SequenceNumber;
38 ULONG Flags;
39 ULONG DebugFlags;
40 CLIENT_ID DebugCid;
41 ULONG ReferenceCount;
42 ULONG ProcessGroupId;
43 ULONG ProcessGroupSequence;
44 ULONG fVDM;
45 ULONG ThreadCount;
46 ULONG PriorityClass;
47 ULONG Reserved;
48 ULONG ShutdownLevel;
49 ULONG ShutdownFlags;
50 PVOID ServerData[ANYSIZE_ARRAY];
51 } CSR_PROCESS, *PCSR_PROCESS;
52
53 typedef struct _CSR_THREAD
54 {
55 LARGE_INTEGER CreateTime;
56 LIST_ENTRY Link;
57 LIST_ENTRY HashLinks;
58 CLIENT_ID ClientId;
59 PCSR_PROCESS Process;
60 struct _CSR_WAIT_BLOCK *WaitBlock;
61 HANDLE ThreadHandle;
62 ULONG Flags;
63 ULONG ReferenceCount;
64 ULONG ImpersonationCount;
65 } CSR_THREAD, *PCSR_THREAD;
66
67 /* ENUMERATIONS **************************************************************/
68 #define CSR_SRV_SERVER 0
69
70 typedef enum _CSR_PROCESS_FLAGS
71 {
72 CsrProcessTerminating = 0x1,
73 CsrProcessSkipShutdown = 0x2,
74 CsrProcessNormalPriority = 0x10,
75 CsrProcessIdlePriority = 0x20,
76 CsrProcessHighPriority = 0x40,
77 CsrProcessRealtimePriority = 0x80,
78 CsrProcessCreateNewGroup = 0x100,
79 CsrProcessTerminated = 0x200,
80 CsrProcessLastThreadTerminated = 0x400,
81 CsrProcessIsConsoleApp = 0x800
82 } CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS;
83
84 #define CsrProcessPriorityFlags (CsrProcessNormalPriority | \
85 CsrProcessIdlePriority | \
86 CsrProcessHighPriority | \
87 CsrProcessRealtimePriority)
88
89 typedef enum _CSR_THREAD_FLAGS
90 {
91 CsrThreadAltertable = 0x1,
92 CsrThreadInTermination = 0x2,
93 CsrThreadTerminated = 0x4,
94 CsrThreadIsServerThread = 0x10
95 } CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS;
96
97 typedef enum _SHUTDOWN_RESULT
98 {
99 CsrShutdownCsrProcess = 1,
100 CsrShutdownNonCsrProcess,
101 CsrShutdownCancelled
102 } SHUTDOWN_RESULT, *PSHUTDOWN_RESULT;
103
104 typedef enum _CSR_SHUTDOWN_FLAGS
105 {
106 CsrShutdownSystem = 4,
107 CsrShutdownOther = 8
108 } CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS;
109
110 typedef enum _CSR_DEBUG_FLAGS
111 {
112 CsrDebugOnlyThisProcess = 1,
113 CsrDebugProcessChildren = 2
114 } CSR_PROCESS_DEBUG_FLAGS, *PCSR_PROCESS_DEBUG_FLAGS;
115
116 /* FUNCTION TYPES ************************************************************/
117 typedef
118 NTSTATUS
119 (NTAPI *PCSR_CONNECT_CALLBACK)(
120 IN PCSR_PROCESS CsrProcess,
121 IN OUT PVOID ConnectionInfo,
122 IN OUT PULONG ConnectionInfoLength
123 );
124
125 typedef
126 VOID
127 (NTAPI *PCSR_DISCONNECT_CALLBACK)(IN PCSR_PROCESS CsrProcess);
128
129 typedef
130 NTSTATUS
131 (NTAPI *PCSR_NEWPROCESS_CALLBACK)(
132 IN PCSR_PROCESS Parent,
133 IN PCSR_PROCESS CsrProcess
134 );
135
136 typedef
137 VOID
138 (NTAPI *PCSR_HARDERROR_CALLBACK)(
139 IN PCSR_THREAD CsrThread,
140 IN PHARDERROR_MSG HardErrorMessage
141 );
142
143 typedef
144 ULONG
145 (NTAPI *PCSR_SHUTDOWNPROCESS_CALLBACK)(
146 IN PCSR_PROCESS CsrProcess,
147 IN ULONG Flags,
148 IN BOOLEAN FirstPhase
149 );
150
151
152 /* FIXME: Put into public NDK Header */
153 typedef ULONG CSR_API_NUMBER;
154
155 #define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m)
156 #define CSR_API_ID_FROM_OPCODE(n) ((ULONG)((USHORT)(n)))
157 #define CSR_SERVER_ID_FROM_OPCODE(n) (ULONG)((n) >> 16)
158
159 typedef struct _CSR_CONNECTION_INFO
160 {
161 ULONG Unknown[2];
162 HANDLE ObjectDirectory;
163 PVOID SharedSectionBase;
164 PVOID SharedSectionHeap;
165 PVOID SharedSectionData;
166 ULONG DebugFlags;
167 ULONG Unknown2[3];
168 HANDLE ProcessId;
169 } CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO;
170
171 typedef struct _CSR_CLIENT_CONNECT
172 {
173 ULONG ServerId;
174 PVOID ConnectionInfo;
175 ULONG ConnectionInfoSize;
176 } CSR_CLIENT_CONNECT, *PCSR_CLIENT_CONNECT;
177
178 typedef struct _CSR_API_MESSAGE
179 {
180 PORT_MESSAGE Header;
181 union
182 {
183 CSR_CONNECTION_INFO ConnectionInfo;
184 struct
185 {
186 PVOID CsrCaptureData;
187 CSR_API_NUMBER Opcode;
188 ULONG Status;
189 ULONG Reserved;
190 union
191 {
192 CSR_CLIENT_CONNECT CsrClientConnect;
193 };
194 };
195 };
196 } CSR_API_MESSAGE, *PCSR_API_MESSAGE;
197
198 typedef struct _CSR_CAPTURE_BUFFER
199 {
200 ULONG Size;
201 struct _CSR_CAPTURE_BUFFER *PreviousCaptureBuffer;
202 ULONG PointerCount;
203 ULONG_PTR BufferEnd;
204 } CSR_CAPTURE_BUFFER, *PCSR_CAPTURE_BUFFER;
205
206 /* Private data resumes here */
207 typedef
208 NTSTATUS
209 (NTAPI *PCSR_API_ROUTINE)(
210 IN OUT PCSR_API_MESSAGE ApiMessage,
211 IN OUT PULONG Reply
212 );
213
214 typedef struct _CSR_SERVER_DLL
215 {
216 ULONG Length;
217 HANDLE Event;
218 ANSI_STRING Name;
219 HANDLE ServerHandle;
220 ULONG ServerId;
221 ULONG Unknown;
222 ULONG ApiBase;
223 ULONG HighestApiSupported;
224 PCSR_API_ROUTINE *DispatchTable;
225 PBOOLEAN ValidTable;
226 PCHAR *NameTable;
227 ULONG SizeOfProcessData;
228 PCSR_CONNECT_CALLBACK ConnectCallback;
229 PCSR_DISCONNECT_CALLBACK DisconnectCallback;
230 PCSR_HARDERROR_CALLBACK HardErrorCallback;
231 PVOID SharedSection;
232 PCSR_NEWPROCESS_CALLBACK NewProcessCallback;
233 PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback;
234 ULONG Unknown2[3];
235 } CSR_SERVER_DLL, *PCSR_SERVER_DLL;
236
237 typedef
238 NTSTATUS
239 (NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL ServerDll);
240
241 typedef
242 BOOLEAN
243 (*CSR_WAIT_FUNCTION)(
244 IN PLIST_ENTRY WaitList,
245 IN PCSR_THREAD WaitThread,
246 IN PCSR_API_MESSAGE WaitApiMessage,
247 IN PVOID WaitContext,
248 IN PVOID WaitArgument1,
249 IN PVOID WaitArgument2,
250 IN ULONG WaitFlags
251 );
252
253 typedef struct _CSR_WAIT_BLOCK
254 {
255 ULONG Size;
256 LIST_ENTRY WaitList;
257 LIST_ENTRY UserWaitList;
258 PVOID WaitContext;
259 PCSR_THREAD WaitThread;
260 CSR_WAIT_FUNCTION WaitFunction;
261 CSR_API_MESSAGE WaitApiMessage;
262 } CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK;
263
264 /* PROTOTYPES ****************************************************************/
265
266 NTSTATUS
267 NTAPI
268 CsrServerInitialization(
269 ULONG ArgumentCount,
270 PCHAR Arguments[]
271 );
272
273 #ifdef _MSC_VER
274 #pragma warning(pop)
275 #endif
276
277 #endif