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