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