[CMAKE]
[reactos.git] / subsystems / csr / csrsrv / srv.h
1 #pragma once
2
3 /* PSDK/NDK Headers */
4 #define NTOS_MODE_USER
5 #include <stdio.h>
6 #define WIN32_NO_STATUS
7 #include <windows.h>
8 #include <winnt.h>
9 #include <ndk/ntndk.h>
10
11 /* CSR Header */
12 #include <csr/server.h>
13
14 /* PSEH for SEH Support */
15 #include <pseh/pseh2.h>
16
17 /* DEFINES *******************************************************************/
18
19 #define CSR_SERVER_DLL_MAX 4
20
21 #define CsrAcquireProcessLock() \
22 RtlEnterCriticalSection(&CsrProcessLock);
23
24 #define CsrReleaseProcessLock() \
25 RtlLeaveCriticalSection(&CsrProcessLock);
26
27 #define CsrAcquireWaitLock() \
28 RtlEnterCriticalSection(&CsrWaitListsLock);
29
30 #define CsrReleaseWaitLock() \
31 RtlLeaveCriticalSection(&CsrWaitListsLock);
32
33 #define CsrAcquireNtSessionLock() \
34 RtlEnterCriticalSection(&CsrNtSessionLock)
35
36 #define CsrReleaseNtSessionLock() \
37 RtlLeaveCriticalSection(&CsrNtSessionLock)
38
39 #define CsrHashThread(t) \
40 (HandleToUlong(t)&(256 - 1))
41
42 #define SM_REG_KEY \
43 L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Session Manager"
44
45 #define SESSION_ROOT L"\\Sessions"
46 #define GLOBAL_ROOT L"\\GLOBAL??"
47 #define SYMLINK_NAME L"SymbolicLink"
48 #define SB_PORT_NAME L"SbAbiPort"
49 #define CSR_PORT_NAME L"ApiPort"
50 #define UNICODE_PATH_SEP L"\\"
51
52 #define ROUND_UP(n, align) ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
53 #define ROUND_DOWN(n, align) (((ULONG)n) & ~((align) - 1l))
54
55 /* DATA **********************************************************************/
56
57 extern ULONG CsrTotalPerProcessDataLength;
58 extern ULONG CsrMaxApiRequestThreads;
59 extern PCSR_SERVER_DLL CsrLoadedServerDll[CSR_SERVER_DLL_MAX];
60 extern PCSR_PROCESS CsrRootProcess;
61 extern UNICODE_STRING CsrSbApiPortName;
62 extern UNICODE_STRING CsrApiPortName;
63 extern HANDLE CsrSbApiPort;
64 extern HANDLE CsrSmApiPort;
65 extern HANDLE CsrApiPort;
66 extern HANDLE CsrHeap;
67 extern RTL_CRITICAL_SECTION CsrProcessLock;
68 extern RTL_CRITICAL_SECTION CsrWaitListsLock;
69 extern LIST_ENTRY CsrThreadHashTable[256];
70 extern HANDLE CsrInitializationEvent;
71 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo;
72 extern UNICODE_STRING CsrDirectoryName;
73 extern HANDLE CsrObjectDirectory;
74 extern PSB_API_ROUTINE CsrServerSbApiDispatch[5];
75
76 /* FUNCTIONS *****************************************************************/
77
78 /* FIXME: Public APIs should go in the CSR Server Include */
79 NTSTATUS
80 NTAPI
81 CsrLoadServerDll(
82 IN PCHAR DllString,
83 IN PCHAR EntryPoint,
84 IN ULONG ServerId
85 );
86
87 NTSTATUS
88 NTAPI
89 CsrServerInitialization(
90 ULONG ArgumentCount,
91 PCHAR Arguments[]
92 );
93
94 NTSTATUS
95 NTAPI
96 CsrCreateSessionObjectDirectory(IN ULONG SessionId);
97
98 NTSTATUS
99 NTAPI
100 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory);
101
102 NTSTATUS
103 NTAPI
104 CsrSrvCreateSharedSection(IN PCHAR ParameterValue);
105
106 NTSTATUS
107 NTAPI
108 CsrInitializeNtSessions(VOID);
109
110 NTSTATUS
111 NTAPI
112 CsrInitializeProcesses(VOID);
113
114 NTSTATUS
115 NTAPI
116 CsrApiPortInitialize(VOID);
117
118 NTSTATUS
119 NTAPI
120 CsrSbApiPortInitialize(VOID);
121
122 BOOLEAN
123 NTAPI
124 CsrSbCreateSession(IN PSB_API_MESSAGE ApiMessage);
125
126 BOOLEAN
127 NTAPI
128 CsrSbTerminateSession(IN PSB_API_MESSAGE ApiMessage);
129
130 BOOLEAN
131 NTAPI
132 CsrSbForeignSessionComplete(IN PSB_API_MESSAGE ApiMessage);
133
134 BOOLEAN
135 NTAPI
136 CsrSbCreateProcess(IN PSB_API_MESSAGE ApiMessage);
137
138 PCSR_PROCESS
139 NTAPI
140 CsrAllocateProcess(VOID);
141
142 PCSR_THREAD
143 NTAPI
144 CsrAllocateThread(IN PCSR_PROCESS CsrProcess);
145
146 VOID
147 NTAPI
148 CsrInsertThread(
149 IN PCSR_PROCESS Process,
150 IN PCSR_THREAD Thread
151 );
152
153 VOID
154 NTAPI
155 CsrSetBackgroundPriority(IN PCSR_PROCESS CsrProcess);
156
157 VOID
158 NTAPI
159 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess);
160
161 NTSTATUS
162 NTAPI
163 CsrGetProcessLuid(
164 HANDLE hProcess,
165 PLUID Luid
166 );
167
168 BOOLEAN
169 NTAPI
170 CsrImpersonateClient(IN PCSR_THREAD CsrThread);
171
172 BOOLEAN
173 NTAPI
174 CsrRevertToSelf(VOID);
175
176 PCSR_THREAD
177 NTAPI
178 CsrLocateThreadByClientId(
179 OUT PCSR_PROCESS *Process,
180 IN PCLIENT_ID ClientId
181 );
182
183 VOID
184 NTAPI
185 CsrDereferenceNtSession(
186 IN PCSR_NT_SESSION Session,
187 NTSTATUS ExitStatus
188 );
189
190 VOID
191 NTAPI
192 CsrReferenceNtSession(PCSR_NT_SESSION Session);
193
194 VOID
195 NTAPI
196 CsrLockedDereferenceThread(PCSR_THREAD CsrThread);
197
198 VOID
199 NTAPI
200 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess);
201
202 NTSTATUS
203 NTAPI
204 CsrLockProcessByClientId(
205 IN HANDLE Pid,
206 OUT PCSR_PROCESS *CsrProcess OPTIONAL
207 );
208
209 NTSTATUS
210 NTAPI
211 CsrUnlockProcess(PCSR_PROCESS CsrProcess);
212
213 NTSTATUS
214 NTAPI
215 CsrSrvClientConnect(
216 IN OUT PCSR_API_MESSAGE ApiMessage,
217 IN OUT PULONG Reply
218 );
219
220 NTSTATUS
221 NTAPI
222 CsrSrvUnusedFunction(
223 IN OUT PCSR_API_MESSAGE ApiMessage,
224 IN OUT PULONG Reply
225 );
226
227 NTSTATUS
228 NTAPI
229 CsrSrvIdentifyAlertableThread(
230 IN OUT PCSR_API_MESSAGE ApiMessage,
231 IN OUT PULONG Reply
232 );
233
234 NTSTATUS
235 NTAPI
236 CsrSrvSetPriorityClass(
237 IN OUT PCSR_API_MESSAGE ApiMessage,
238 IN OUT PULONG Reply
239 );
240
241 NTSTATUS
242 NTAPI
243 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll);
244
245 VOID
246 NTAPI
247 CsrDereferenceThread(PCSR_THREAD CsrThread);
248
249 VOID
250 NTAPI
251 CsrSbApiRequestThread(IN PVOID Parameter);
252
253 NTSTATUS
254 NTAPI
255 CsrApiRequestThread(IN PVOID Parameter);
256
257 PCSR_THREAD
258 NTAPI
259 CsrAddStaticServerThread(
260 IN HANDLE hThread,
261 IN PCLIENT_ID ClientId,
262 IN ULONG ThreadFlags
263 );
264
265 PCSR_THREAD
266 NTAPI
267 CsrConnectToUser(VOID);
268
269 PCSR_THREAD
270 NTAPI
271 CsrLocateThreadInProcess(
272 IN PCSR_PROCESS CsrProcess OPTIONAL,
273 IN PCLIENT_ID Cid
274 );
275
276 NTSTATUS
277 NTAPI
278 CsrSbApiHandleConnectionRequest(IN PSB_API_MESSAGE Message);
279
280 NTSTATUS
281 NTAPI
282 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage);
283
284 NTSTATUS
285 NTAPI
286 CsrSrvAttachSharedSection(
287 IN PCSR_PROCESS CsrProcess OPTIONAL,
288 OUT PCSR_CONNECTION_INFO ConnectInfo
289 );
290
291 VOID
292 NTAPI
293 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage);
294
295 BOOLEAN
296 NTAPI
297 CsrNotifyWaitBlock(
298 IN PCSR_WAIT_BLOCK WaitBlock,
299 IN PLIST_ENTRY WaitList,
300 IN PVOID WaitArgument1,
301 IN PVOID WaitArgument2,
302 IN ULONG WaitFlags,
303 IN BOOLEAN DereferenceThread
304 );
305
306 VOID
307 NTAPI
308 CsrDereferenceProcess(PCSR_PROCESS CsrProcess);
309
310 VOID
311 NTAPI
312 CsrInsertProcess(
313 IN PCSR_PROCESS Parent OPTIONAL,
314 IN PCSR_PROCESS CurrentProcess OPTIONAL,
315 IN PCSR_PROCESS CsrProcess
316 );
317
318 NTSTATUS
319 NTAPI
320 CsrPopulateDosDevicesDirectory(
321 IN HANDLE DosDevicesDirectory,
322 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap
323 );
324
325 BOOLEAN
326 NTAPI
327 CsrValidateMessageBuffer(
328 IN PCSR_API_MESSAGE ApiMessage,
329 IN PVOID *Buffer,
330 IN ULONG ArgumentSize,
331 IN ULONG ArgumentCount
332 );
333
334 NTSTATUS
335 NTAPI
336 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR *LocalSystemSd);
337
338 NTSTATUS
339 NTAPI
340 CsrDestroyThread(IN PCLIENT_ID Cid);
341
342 NTSTATUS
343 NTAPI
344 CsrDestroyProcess(
345 IN PCLIENT_ID Cid,
346 IN NTSTATUS ExitStatus
347 );
348
349 LONG
350 NTAPI
351 CsrUnhandledExceptionFilter(
352 IN PEXCEPTION_POINTERS ExceptionInfo
353 );
354
355 VOID
356 NTAPI
357 CsrProcessRefcountZero(IN PCSR_PROCESS CsrProcess);
358
359 VOID
360 NTAPI
361 CsrThreadRefcountZero(IN PCSR_THREAD CsrThread);
362
363 NTSTATUS
364 NTAPI
365 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory);