Sync with trunk r63637.
[reactos.git] / subsystems / win32 / csrsrv / api.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: subsystems/win32/csrsrv/api.h
5 * PURPOSE: CSRSS Internal API
6 */
7
8 #pragma once
9
10 extern RTL_CRITICAL_SECTION CsrProcessLock, CsrWaitListsLock;
11
12 #define CsrAcquireProcessLock() \
13 RtlEnterCriticalSection(&CsrProcessLock);
14
15 #define CsrReleaseProcessLock() \
16 RtlLeaveCriticalSection(&CsrProcessLock);
17
18 #define ProcessStructureListLocked() \
19 (CsrProcessLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
20
21 #define CsrAcquireWaitLock() \
22 RtlEnterCriticalSection(&CsrWaitListsLock);
23
24 #define CsrReleaseWaitLock() \
25 RtlLeaveCriticalSection(&CsrWaitListsLock);
26
27 #define CsrAcquireNtSessionLock() \
28 RtlEnterCriticalSection(&CsrNtSessionLock);
29
30 #define CsrReleaseNtSessionLock() \
31 RtlLeaveCriticalSection(&CsrNtSessionLock);
32
33
34 #define CSR_SERVER_DLL_MAX 4
35
36
37 // Debug Flag
38 extern ULONG CsrDebug;
39
40 extern HANDLE hBootstrapOk;
41 extern HANDLE CsrApiPort;
42 extern HANDLE CsrSmApiPort;
43 extern HANDLE CsrSbApiPort;
44 #define NUMBER_THREAD_HASH_BUCKETS 257
45 extern LIST_ENTRY CsrThreadHashTable[NUMBER_THREAD_HASH_BUCKETS];
46 extern PCSR_PROCESS CsrRootProcess;
47 extern UNICODE_STRING CsrDirectoryName;
48 extern ULONG CsrTotalPerProcessDataLength;
49 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo;
50 extern HANDLE CsrHeap;
51 extern PVOID CsrSrvSharedSectionHeap;
52 extern PVOID *CsrSrvSharedStaticServerData;
53 extern HANDLE CsrInitializationEvent;
54 extern PCSR_SERVER_DLL CsrLoadedServerDll[CSR_SERVER_DLL_MAX];
55 extern ULONG CsrMaxApiRequestThreads;
56
57 /****************************************************/
58 extern UNICODE_STRING CsrSbApiPortName;
59 extern UNICODE_STRING CsrApiPortName;
60 extern RTL_CRITICAL_SECTION CsrProcessLock;
61 extern RTL_CRITICAL_SECTION CsrWaitListsLock;
62 extern HANDLE CsrObjectDirectory;
63 /****************************************************/
64
65
66
67 CSR_API(CsrSrvClientConnect);
68 CSR_API(CsrSrvUnusedFunction);
69 CSR_API(CsrSrvIdentifyAlertableThread);
70 CSR_API(CsrSrvSetPriorityClass);
71
72
73 NTSTATUS
74 NTAPI
75 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll);
76
77
78 BOOLEAN
79 NTAPI
80 CsrCaptureArguments(IN PCSR_THREAD CsrThread,
81 IN PCSR_API_MESSAGE ApiMessage);
82
83 VOID
84 NTAPI
85 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage);
86
87 NTSTATUS
88 NTAPI
89 CsrLoadServerDll(IN PCHAR DllString,
90 IN PCHAR EntryPoint OPTIONAL,
91 IN ULONG ServerId);
92
93
94 PCSR_THREAD
95 NTAPI
96 CsrAllocateThread(IN PCSR_PROCESS CsrProcess);
97
98 PCSR_PROCESS
99 NTAPI
100 CsrAllocateProcess(VOID);
101
102 VOID
103 NTAPI
104 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess);
105
106 VOID
107 NTAPI
108 CsrInsertProcess(IN PCSR_PROCESS ParentProcess OPTIONAL,
109 IN PCSR_PROCESS CsrProcess);
110
111 VOID
112 NTAPI
113 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess);
114
115 NTSTATUS
116 NTAPI
117 CsrApiRequestThread(IN PVOID Parameter);
118
119 VOID
120 NTAPI
121 CsrSbApiRequestThread(IN PVOID Parameter);
122
123 NTSTATUS
124 NTAPI
125 CsrApiPortInitialize(VOID);
126
127 BOOLEAN
128 NTAPI
129 ProtectHandle(IN HANDLE ObjectHandle);
130
131 BOOLEAN
132 NTAPI
133 UnProtectHandle(IN HANDLE ObjectHandle);
134
135 NTSTATUS
136 NTAPI
137 CsrInsertThread(IN PCSR_PROCESS Process,
138 IN PCSR_THREAD Thread);
139
140 VOID
141 NTAPI
142 CsrDeallocateThread(IN PCSR_THREAD CsrThread);
143
144 VOID
145 NTAPI
146 CsrLockedReferenceProcess(IN PCSR_PROCESS CsrProcess);
147
148 VOID
149 NTAPI
150 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread);
151
152 NTSTATUS
153 NTAPI
154 CsrInitializeProcessStructure(VOID);
155
156 PCSR_THREAD
157 NTAPI
158 CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL,
159 IN PCLIENT_ID Cid);
160 PCSR_THREAD
161 NTAPI
162 CsrLocateThreadByClientId(OUT PCSR_PROCESS *Process OPTIONAL,
163 IN PCLIENT_ID ClientId);
164
165 NTSTATUS
166 NTAPI
167 CsrInitializeNtSessionList(VOID);
168
169 NTSTATUS
170 NTAPI
171 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
172 OUT PCSR_API_CONNECTINFO ConnectInfo);
173
174 NTSTATUS
175 NTAPI
176 CsrSrvCreateSharedSection(IN PCHAR ParameterValue);
177
178 VOID
179 NTAPI
180 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess);
181
182 VOID
183 NTAPI
184 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread);
185
186 BOOLEAN
187 NTAPI
188 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock,
189 IN PLIST_ENTRY WaitList,
190 IN PVOID WaitArgument1,
191 IN PVOID WaitArgument2,
192 IN ULONG WaitFlags,
193 IN BOOLEAN DereferenceThread);
194
195 VOID
196 NTAPI
197 CsrReferenceNtSession(IN PCSR_NT_SESSION Session);
198
199 VOID
200 NTAPI
201 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session,
202 IN NTSTATUS ExitStatus);
203
204 /******************************************************************************
205 ******************************************************************************/
206
207 NTSTATUS
208 NTAPI
209 CsrCreateSessionObjectDirectory(IN ULONG SessionId);
210
211 NTSTATUS
212 NTAPI
213 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory);
214
215 NTSTATUS
216 NTAPI
217 CsrSbApiPortInitialize(VOID);
218
219 BOOLEAN
220 NTAPI
221 CsrSbCreateSession(IN PSB_API_MSG ApiMessage);
222
223 BOOLEAN
224 NTAPI
225 CsrSbTerminateSession(IN PSB_API_MSG ApiMessage);
226
227 BOOLEAN
228 NTAPI
229 CsrSbForeignSessionComplete(IN PSB_API_MSG ApiMessage);
230
231 BOOLEAN
232 NTAPI
233 CsrSbCreateProcess(IN PSB_API_MSG ApiMessage);
234
235 NTSTATUS
236 NTAPI
237 CsrSbApiHandleConnectionRequest(IN PSB_API_MSG Message);
238
239 NTSTATUS
240 NTAPI
241 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage);
242
243 /** this API is used with CsrPopulateDosDevices, deprecated in r55585.
244 NTSTATUS
245 NTAPI
246 CsrPopulateDosDevicesDirectory(IN HANDLE DosDevicesDirectory,
247 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap);
248 **/
249
250 NTSTATUS
251 NTAPI
252 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR *LocalSystemSd);
253
254 NTSTATUS
255 NTAPI
256 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory);
257
258 /* EOF */