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