f6ffb1ad8e5f4fc34d3c022856982708196d45a9
[reactos.git] / subsystems / win32 / csrsrv / include / api.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: subsys/csrss/include/api.h
5 * PURPOSE: CSRSS API interface
6 */
7
8 #pragma once
9
10 #define NTOS_MODE_USER
11 #include <ndk/psfuncs.h>
12 #include <ndk/rtlfuncs.h>
13
14 #include <csr/csrsrv.h>
15
16
17 extern RTL_CRITICAL_SECTION CsrProcessLock, CsrWaitListsLock;
18
19 #define CsrAcquireProcessLock() \
20 RtlEnterCriticalSection(&CsrProcessLock);
21
22 #define CsrReleaseProcessLock() \
23 RtlLeaveCriticalSection(&CsrProcessLock);
24
25 #define ProcessStructureListLocked() \
26 (CsrProcessLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
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
41 #define CSR_SERVER_DLL_MAX 4
42
43
44 /***
45 *** Old structure. Deprecated.
46 ***/
47 typedef struct _CSRSS_API_DEFINITION
48 {
49 ULONG ApiID;
50 ULONG MinRequestSize;
51 PCSR_API_ROUTINE Handler;
52 } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
53
54 #define CSRSS_DEFINE_API(Func, Handler) \
55 { Func, sizeof(CSRSS_##Func), Handler }
56
57
58
59
60 typedef struct _CSRSS_LISTEN_DATA
61 {
62 HANDLE ApiPortHandle;
63 ULONG ApiDefinitionsCount;
64 PCSRSS_API_DEFINITION *ApiDefinitions;
65 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
66
67
68
69
70 /******************************************************************************
71 ******************************************************************************
72 ******************************************************************************/
73
74
75 extern HANDLE hBootstrapOk;
76 extern HANDLE CsrApiPort;
77 extern HANDLE CsrSmApiPort;
78 extern HANDLE CsrSbApiPort;
79 extern LIST_ENTRY CsrThreadHashTable[256];
80 extern PCSR_PROCESS CsrRootProcess;
81 extern UNICODE_STRING CsrDirectoryName;
82 extern ULONG CsrDebug;
83 extern ULONG CsrTotalPerProcessDataLength;
84 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo;
85 extern HANDLE CsrHeap;
86 extern PVOID CsrSrvSharedSectionHeap;
87 extern PVOID *CsrSrvSharedStaticServerData;
88 extern HANDLE CsrInitializationEvent;
89 extern PCSR_SERVER_DLL CsrLoadedServerDll[CSR_SERVER_DLL_MAX];
90 extern ULONG CsrMaxApiRequestThreads;
91
92 /****************************************************/
93 extern UNICODE_STRING CsrSbApiPortName;
94 extern UNICODE_STRING CsrApiPortName;
95 extern RTL_CRITICAL_SECTION CsrProcessLock;
96 extern RTL_CRITICAL_SECTION CsrWaitListsLock;
97 extern HANDLE CsrObjectDirectory;
98 extern PSB_API_ROUTINE CsrServerSbApiDispatch[5];
99 /****************************************************/
100
101
102
103 CSR_API(CsrSrvClientConnect);
104 CSR_API(CsrSrvUnusedFunction);
105 CSR_API(CsrSrvIdentifyAlertableThread);
106 CSR_API(CsrSrvSetPriorityClass);
107
108
109 /***
110
111 BOOLEAN
112 NTAPI
113 CsrCaptureArguments(
114 IN PCSR_THREAD CsrThread,
115 IN PCSR_API_MESSAGE ApiMessage
116 );
117
118 VOID
119 NTAPI
120 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage);
121
122 NTSTATUS
123 NTAPI
124 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll);
125
126 ***/
127
128 NTSTATUS
129 NTAPI
130 CsrLoadServerDll(IN PCHAR DllString,
131 IN PCHAR EntryPoint OPTIONAL,
132 IN ULONG ServerId);
133
134
135 PCSR_THREAD
136 NTAPI
137 CsrAllocateThread(IN PCSR_PROCESS CsrProcess);
138
139 PCSR_PROCESS
140 NTAPI
141 CsrAllocateProcess(VOID);
142
143 VOID
144 NTAPI
145 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess);
146
147 VOID
148 NTAPI
149 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess);
150
151 VOID
152 NTAPI
153 CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL,
154 IN PCSR_PROCESS CurrentProcess OPTIONAL,
155 IN PCSR_PROCESS CsrProcess);
156
157
158 #if 0
159 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
160 #endif
161
162 VOID FASTCALL CsrApiCallHandler(IN OUT PCSR_API_MESSAGE ApiMessage, OUT PULONG Reply);
163
164 NTSTATUS
165 NTAPI
166 CsrApiRequestThread(IN PVOID Parameter); // HANDLE ServerPort ??
167
168 VOID
169 NTAPI
170 CsrSbApiRequestThread(IN PVOID Parameter);
171
172 NTSTATUS
173 NTAPI
174 CsrApiPortInitialize(VOID);
175
176 BOOLEAN
177 NTAPI
178 ProtectHandle(IN HANDLE ObjectHandle);
179
180 BOOLEAN
181 NTAPI
182 UnProtectHandle(IN HANDLE ObjectHandle);
183
184 VOID
185 NTAPI
186 CsrInsertThread(IN PCSR_PROCESS Process,
187 IN PCSR_THREAD Thread);
188
189 VOID
190 NTAPI
191 CsrLockedReferenceProcess(IN PCSR_PROCESS CsrProcess);
192
193 VOID
194 NTAPI
195 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread);
196
197 NTSTATUS
198 NTAPI
199 CsrInitializeProcessStructure(VOID);
200
201 // NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc,
202 // PVOID Context);
203 PCSR_THREAD
204 NTAPI
205 CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL,
206 IN PCLIENT_ID Cid);
207 PCSR_THREAD
208 NTAPI
209 CsrLocateThreadByClientId(OUT PCSR_PROCESS *Process OPTIONAL,
210 IN PCLIENT_ID ClientId);
211
212 // HACK
213 VOID
214 NTAPI
215 CsrProcessRefcountZero(IN PCSR_PROCESS CsrProcess);
216
217 // HACK
218 VOID
219 NTAPI
220 CsrThreadRefcountZero(IN PCSR_THREAD CsrThread);
221
222 NTSTATUS
223 NTAPI
224 CsrInitializeNtSessionList(VOID);
225
226 NTSTATUS
227 NTAPI
228 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
229 OUT PCSR_CONNECTION_INFO ConnectInfo);
230
231 NTSTATUS
232 NTAPI
233 CsrSrvCreateSharedSection(IN PCHAR ParameterValue);
234
235 VOID
236 NTAPI
237 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess);
238
239 VOID
240 NTAPI
241 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread);
242
243 BOOLEAN
244 NTAPI
245 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock,
246 IN PLIST_ENTRY WaitList,
247 IN PVOID WaitArgument1,
248 IN PVOID WaitArgument2,
249 IN ULONG WaitFlags,
250 IN BOOLEAN DereferenceThread);
251
252 VOID
253 NTAPI
254 CsrReferenceNtSession(IN PCSR_NT_SESSION Session);
255
256 VOID
257 NTAPI
258 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session,
259 IN NTSTATUS ExitStatus);
260
261 /******************************************************************************
262 ******************************************************************************/
263
264 NTSTATUS
265 NTAPI
266 CsrCreateSessionObjectDirectory(IN ULONG SessionId);
267
268 NTSTATUS
269 NTAPI
270 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory);
271
272 NTSTATUS
273 NTAPI
274 CsrSbApiPortInitialize(VOID);
275
276 BOOLEAN
277 NTAPI
278 CsrSbCreateSession(IN PSB_API_MSG ApiMessage);
279
280 BOOLEAN
281 NTAPI
282 CsrSbTerminateSession(IN PSB_API_MSG ApiMessage);
283
284 BOOLEAN
285 NTAPI
286 CsrSbForeignSessionComplete(IN PSB_API_MSG ApiMessage);
287
288 BOOLEAN
289 NTAPI
290 CsrSbCreateProcess(IN PSB_API_MSG ApiMessage);
291
292 NTSTATUS
293 NTAPI
294 CsrSbApiHandleConnectionRequest(IN PSB_API_MSG Message);
295
296 NTSTATUS
297 NTAPI
298 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage);
299
300 /** this API is used with CsrPopulateDosDevices, deprecated in r55585.
301 NTSTATUS
302 NTAPI
303 CsrPopulateDosDevicesDirectory(IN HANDLE DosDevicesDirectory,
304 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap);
305 **/
306
307 NTSTATUS
308 NTAPI
309 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR *LocalSystemSd);
310
311 NTSTATUS
312 NTAPI
313 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory);
314
315 /* EOF */