[NTDLL/INCLUDE]: Rename the CSRSRV API Numbers not to conflict with the actual functions.
[reactos.git] / reactos / subsystems / win32 / csrss / include / api.h
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: subsys/csrss/include/api.h
6 * PURPOSE: CSRSS API interface
7 */
8
9 #pragma once
10
11 #define NTOS_MODE_USER
12 #include <ndk/psfuncs.h>
13 #include <ndk/rtlfuncs.h>
14
15 #include <csrss/csrss.h>
16
17 #define CSR_SRV_SERVER 0
18 #define CSR_SERVER_DLL_MAX 4
19 #define LOCK RtlEnterCriticalSection(&ProcessDataLock)
20 #define UNLOCK RtlLeaveCriticalSection(&ProcessDataLock)
21 #define CsrAcquireProcessLock() LOCK
22 #define CsrReleaseProcessLock() UNLOCK
23 #define ProcessStructureListLocked() \
24 (ProcessDataLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
25
26 #define CsrAcquireWaitLock() \
27 RtlEnterCriticalSection(&CsrWaitListsLock);
28
29 #define CsrReleaseWaitLock() \
30 RtlLeaveCriticalSection(&CsrWaitListsLock);
31
32 #define CsrAcquireNtSessionLock() \
33 RtlEnterCriticalSection(&CsrNtSessionLock);
34
35 #define CsrReleaseNtSessionLock() \
36 RtlLeaveCriticalSection(&CsrNtSessionLock);
37
38 typedef enum _CSR_THREAD_FLAGS
39 {
40 CsrThreadAltertable = 0x1,
41 CsrThreadInTermination = 0x2,
42 CsrThreadTerminated = 0x4,
43 CsrThreadIsServerThread = 0x10
44 } CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS;
45
46 typedef enum _SHUTDOWN_RESULT
47 {
48 CsrShutdownCsrProcess = 1,
49 CsrShutdownNonCsrProcess,
50 CsrShutdownCancelled
51 } SHUTDOWN_RESULT, *PSHUTDOWN_RESULT;
52
53 typedef enum _CSR_SHUTDOWN_FLAGS
54 {
55 CsrShutdownSystem = 4,
56 CsrShutdownOther = 8
57 } CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS;
58
59 typedef enum _CSR_PROCESS_FLAGS
60 {
61 CsrProcessTerminating = 0x1,
62 CsrProcessSkipShutdown = 0x2,
63 CsrProcessCreateNewGroup = 0x100,
64 CsrProcessTerminated = 0x200,
65 CsrProcessLastThreadTerminated = 0x400,
66 CsrProcessIsConsoleApp = 0x800
67 } CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS;
68
69 typedef struct _CSRSS_CON_PROCESS_DATA
70 {
71 HANDLE ConsoleEvent;
72 struct tagCSRSS_CONSOLE *Console;
73 struct tagCSRSS_CONSOLE *ParentConsole;
74 BOOL bInheritHandles;
75 RTL_CRITICAL_SECTION HandleTableLock;
76 ULONG HandleTableSize;
77 struct _CSRSS_HANDLE *HandleTable;
78 PCONTROLDISPATCHER CtrlDispatcher;
79 LIST_ENTRY ConsoleLink;
80 } CSRSS_CON_PROCESS_DATA, *PCSRSS_CON_PROCESS_DATA;
81
82 typedef struct _CSR_NT_SESSION
83 {
84 ULONG ReferenceCount;
85 LIST_ENTRY SessionLink;
86 ULONG SessionId;
87 } CSR_NT_SESSION, *PCSR_NT_SESSION;
88
89 typedef struct _CSR_PROCESS
90 {
91 CLIENT_ID ClientId;
92 LIST_ENTRY ListLink;
93 LIST_ENTRY ThreadList;
94 struct _CSR_PROCESS *Parent;
95 PCSR_NT_SESSION NtSession;
96 ULONG ExpectedVersion;
97 HANDLE ClientPort;
98 ULONG_PTR ClientViewBase;
99 ULONG_PTR ClientViewBounds;
100 HANDLE ProcessHandle;
101 ULONG SequenceNumber;
102 ULONG Flags;
103 ULONG DebugFlags;
104 CLIENT_ID DebugCid;
105 ULONG ReferenceCount;
106 ULONG ProcessGroupId;
107 ULONG ProcessGroupSequence;
108 ULONG fVDM;
109 ULONG ThreadCount;
110 ULONG PriorityClass;
111 ULONG Reserved;
112 ULONG ShutdownLevel;
113 ULONG ShutdownFlags;
114 // PVOID ServerData[ANYSIZE_ARRAY];
115 CSRSS_CON_PROCESS_DATA;
116 } CSR_PROCESS, *PCSR_PROCESS;
117
118 typedef struct _CSR_THREAD
119 {
120 LARGE_INTEGER CreateTime;
121 LIST_ENTRY Link;
122 LIST_ENTRY HashLinks;
123 CLIENT_ID ClientId;
124 PCSR_PROCESS Process;
125 struct _CSR_WAIT_BLOCK *WaitBlock;
126 HANDLE ThreadHandle;
127 ULONG Flags;
128 ULONG ReferenceCount;
129 ULONG ImpersonationCount;
130 } CSR_THREAD, *PCSR_THREAD;
131
132 typedef
133 BOOLEAN
134 (*CSR_WAIT_FUNCTION)(
135 IN PLIST_ENTRY WaitList,
136 IN PCSR_THREAD WaitThread,
137 IN PCSR_API_MESSAGE WaitApiMessage,
138 IN PVOID WaitContext,
139 IN PVOID WaitArgument1,
140 IN PVOID WaitArgument2,
141 IN ULONG WaitFlags
142 );
143
144 typedef struct _CSR_WAIT_BLOCK
145 {
146 ULONG Size;
147 LIST_ENTRY WaitList;
148 LIST_ENTRY UserWaitList;
149 PVOID WaitContext;
150 PCSR_THREAD WaitThread;
151 CSR_WAIT_FUNCTION WaitFunction;
152 CSR_API_MESSAGE WaitApiMessage;
153 } CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK;
154
155 typedef
156 NTSTATUS
157 (NTAPI *PCSR_CONNECT_CALLBACK)(
158 IN PCSR_PROCESS CsrProcess,
159 IN OUT PVOID ConnectionInfo,
160 IN OUT PULONG ConnectionInfoLength
161 );
162
163 typedef
164 VOID
165 (NTAPI *PCSR_DISCONNECT_CALLBACK)(IN PCSR_PROCESS CsrProcess);
166
167 typedef
168 NTSTATUS
169 (NTAPI *PCSR_NEWPROCESS_CALLBACK)(
170 IN PCSR_PROCESS Parent,
171 IN PCSR_PROCESS CsrProcess
172 );
173
174 typedef
175 VOID
176 (NTAPI *PCSR_HARDERROR_CALLBACK)(
177 IN PCSR_THREAD CsrThread,
178 IN PHARDERROR_MSG HardErrorMessage
179 );
180
181 typedef
182 ULONG
183 (NTAPI *PCSR_SHUTDOWNPROCESS_CALLBACK)(
184 IN PCSR_PROCESS CsrProcess,
185 IN ULONG Flags,
186 IN BOOLEAN FirstPhase
187 );
188
189 typedef
190 NTSTATUS
191 (NTAPI *PCSR_API_ROUTINE)(
192 IN OUT PCSR_API_MESSAGE ApiMessage,
193 IN OUT PULONG Reply
194 );
195
196 typedef struct _CSR_SERVER_DLL
197 {
198 ULONG Length;
199 HANDLE Event;
200 ANSI_STRING Name;
201 HANDLE ServerHandle;
202 ULONG ServerId;
203 ULONG Unknown;
204 ULONG ApiBase;
205 ULONG HighestApiSupported;
206 PCSR_API_ROUTINE *DispatchTable;
207 PBOOLEAN ValidTable;
208 PCHAR *NameTable;
209 ULONG SizeOfProcessData;
210 PCSR_CONNECT_CALLBACK ConnectCallback;
211 PCSR_DISCONNECT_CALLBACK DisconnectCallback;
212 PCSR_HARDERROR_CALLBACK HardErrorCallback;
213 PVOID SharedSection;
214 PCSR_NEWPROCESS_CALLBACK NewProcessCallback;
215 PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback;
216 ULONG Unknown2[3];
217 } CSR_SERVER_DLL, *PCSR_SERVER_DLL;
218
219 typedef
220 NTSTATUS
221 (NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL ServerDll);
222
223
224 typedef NTSTATUS (WINAPI *CSRSS_API_PROC)(PCSR_PROCESS ProcessData,
225 PCSR_API_MESSAGE Request);
226
227 typedef struct _CSRSS_API_DEFINITION
228 {
229 ULONG Type;
230 ULONG MinRequestSize;
231 CSRSS_API_PROC Handler;
232 } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
233
234 #define CSRSS_DEFINE_API(Func, Handler) \
235 { Func, sizeof(CSRSS_##Func), Handler }
236
237 typedef struct _CSRSS_LISTEN_DATA
238 {
239 HANDLE ApiPortHandle;
240 ULONG ApiDefinitionsCount;
241 PCSRSS_API_DEFINITION *ApiDefinitions;
242 } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
243
244 #define CSR_API(n) NTSTATUS WINAPI n (\
245 PCSR_PROCESS ProcessData,\
246 PCSR_API_MESSAGE Request)
247
248 /* init.c */
249 extern HANDLE hBootstrapOk;
250 NTSTATUS NTAPI CsrServerInitialization(ULONG ArgumentCount, PCHAR Arguments[]);
251
252 /* api/process.c */
253 CSR_API(CsrConnectProcess);
254 CSR_API(CsrCreateProcess);
255 CSR_API(CsrTerminateProcess);
256 CSR_API(CsrSrvCreateThread);
257 CSR_API(CsrGetShutdownParameters);
258 CSR_API(CsrSetShutdownParameters);
259
260 VOID
261 NTAPI
262 CsrSetBackgroundPriority(IN PCSR_PROCESS CsrProcess);
263
264 PCSR_THREAD
265 NTAPI
266 CsrAllocateThread(IN PCSR_PROCESS CsrProcess);
267
268 PCSR_PROCESS
269 NTAPI
270 CsrAllocateProcess(VOID);
271
272 VOID
273 NTAPI
274 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess);
275
276 VOID
277 NTAPI
278 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess);
279
280 VOID
281 NTAPI
282 CsrDereferenceThread(IN PCSR_THREAD CsrThread);
283
284 VOID
285 NTAPI
286 CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL,
287 IN PCSR_PROCESS CurrentProcess OPTIONAL,
288 IN PCSR_PROCESS CsrProcess);
289
290
291 /* api/wapi.c */
292 NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
293 VOID FASTCALL CsrApiCallHandler(PCSR_PROCESS ProcessData,
294 PCSR_API_MESSAGE Request);
295 VOID WINAPI CsrSbApiRequestThread (PVOID PortHandle);
296 VOID NTAPI ClientConnectionThread(HANDLE ServerPort);
297
298 VOID
299 NTAPI
300 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage);
301
302 extern HANDLE hApiPort;
303 extern HANDLE CsrSmApiPort;
304 extern HANDLE CsrSbApiPort;
305 extern LIST_ENTRY CsrThreadHashTable[256];
306 extern PCSR_PROCESS CsrRootProcess;
307 extern RTL_CRITICAL_SECTION ProcessDataLock, CsrWaitListsLock;
308 extern UNICODE_STRING CsrDirectoryName;
309 extern ULONG CsrDebug;
310 extern ULONG CsrTotalPerProcessDataLength;
311 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo;
312 extern PVOID CsrSrvSharedSectionHeap;
313 extern PVOID *CsrSrvSharedStaticServerData;
314 extern HANDLE CsrInitializationEvent;
315
316 NTSTATUS
317 NTAPI
318 CsrApiPortInitialize(VOID);
319
320 BOOLEAN
321 NTAPI
322 ProtectHandle(IN HANDLE ObjectHandle);
323
324 VOID
325 NTAPI
326 CsrInsertThread(IN PCSR_PROCESS Process,
327 IN PCSR_THREAD Thread);
328
329 /* api/process.c */
330 typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSR_PROCESS ProcessData,
331 PVOID Context);
332 NTSTATUS WINAPI CsrInitializeProcessStructure(VOID);
333 PCSR_PROCESS WINAPI CsrGetProcessData(HANDLE ProcessId);
334 PCSR_PROCESS WINAPI CsrCreateProcessData(HANDLE ProcessId);
335 NTSTATUS WINAPI CsrFreeProcessData( HANDLE Pid );
336 NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
337 PCSR_THREAD NTAPI CsrAddStaticServerThread(IN HANDLE hThread, IN PCLIENT_ID ClientId, IN ULONG ThreadFlags);
338 PCSR_THREAD NTAPI CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL, IN PCLIENT_ID Cid);
339 PCSR_THREAD NTAPI CsrLocateThreadByClientId(OUT PCSR_PROCESS *Process OPTIONAL, IN PCLIENT_ID ClientId);
340 NTSTATUS NTAPI CsrLockProcessByClientId(IN HANDLE Pid, OUT PCSR_PROCESS *CsrProcess OPTIONAL);
341 NTSTATUS NTAPI CsrCreateThread(IN PCSR_PROCESS CsrProcess, IN HANDLE hThread, IN PCLIENT_ID ClientId);
342 NTSTATUS NTAPI CsrUnlockProcess(IN PCSR_PROCESS CsrProcess);
343
344 //hack
345 VOID NTAPI CsrThreadRefcountZero(IN PCSR_THREAD CsrThread);
346
347 NTSTATUS
348 NTAPI
349 CsrInitializeNtSessionList(VOID);
350
351 NTSTATUS
352 NTAPI
353 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL,
354 OUT PCSR_CONNECTION_INFO ConnectInfo);
355
356 NTSTATUS
357 NTAPI
358 CsrSrvCreateSharedSection(IN PCHAR ParameterValue);
359
360 NTSTATUS
361 NTAPI
362 CsrSrvClientConnect(
363 IN OUT PCSR_API_MESSAGE ApiMessage,
364 IN OUT PULONG Reply
365 );
366
367 NTSTATUS
368 NTAPI
369 CsrSrvUnusedFunction(
370 IN OUT PCSR_API_MESSAGE ApiMessage,
371 IN OUT PULONG Reply
372 );
373
374 NTSTATUS
375 NTAPI
376 CsrSrvIdentifyAlertableThread(
377 IN OUT PCSR_API_MESSAGE ApiMessage,
378 IN OUT PULONG Reply
379 );
380
381 NTSTATUS
382 NTAPI
383 CsrSrvSetPriorityClass(
384 IN OUT PCSR_API_MESSAGE ApiMessage,
385 IN OUT PULONG Reply
386 );
387
388 /* api/user.c */
389 CSR_API(CsrRegisterServicesProcess);
390
391 /* EOF */