2 * PROJECT: ReactOS Native Headers
3 * FILE: include/subsys/csrss/csrsrv.h
4 * PURPOSE: Public Definitions for CSR Servers
5 * PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
6 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
12 // see http://code.google.com/p/ontl/source/browse/branches/x64/ntl/nt/csr.hxx?r=67
17 #pragma warning (disable:4201)
23 /* TYPES **********************************************************************/
25 typedef struct _CSR_NT_SESSION
28 LIST_ENTRY SessionLink
;
30 } CSR_NT_SESSION
, *PCSR_NT_SESSION
;
32 /*** old thingie, remove it later... (put it in winsrv -- console) ***/
33 typedef struct _CSRSS_CON_PROCESS_DATA
36 struct tagCSRSS_CONSOLE
*Console
;
37 struct tagCSRSS_CONSOLE
*ParentConsole
;
39 RTL_CRITICAL_SECTION HandleTableLock
;
40 ULONG HandleTableSize
;
41 struct _CSRSS_HANDLE
*HandleTable
;
42 PCONTROLDISPATCHER CtrlDispatcher
;
43 LIST_ENTRY ConsoleLink
;
44 } CSRSS_CON_PROCESS_DATA
, *PCSRSS_CON_PROCESS_DATA
;
45 /*********************************************************************/
46 typedef struct _CSR_PROCESS
50 LIST_ENTRY ThreadList
;
51 struct _CSR_PROCESS
*Parent
;
52 PCSR_NT_SESSION NtSession
;
53 ULONG ExpectedVersion
;
55 ULONG_PTR ClientViewBase
;
56 ULONG_PTR ClientViewBounds
;
64 ULONG ProcessGroupSequence
;
71 PVOID ServerData
[ANYSIZE_ARRAY
]; // ServerDllPerProcessData // One structure per CSR server.
72 CSRSS_CON_PROCESS_DATA
; //// FIXME: Remove it after we activate the previous member.
73 } CSR_PROCESS
, *PCSR_PROCESS
;
75 typedef struct _CSR_THREAD
77 LARGE_INTEGER CreateTime
;
82 struct _CSR_WAIT_BLOCK
*WaitBlock
;
86 ULONG ImpersonationCount
;
87 } CSR_THREAD
, *PCSR_THREAD
;
89 #define CsrGetClientThread() \
90 ((PCSR_THREAD)(NtCurrentTeb()->CsrClientThread))
93 /* ENUMERATIONS ***************************************************************/
95 typedef enum _CSR_PROCESS_FLAGS
97 CsrProcessTerminating
= 0x1,
98 CsrProcessSkipShutdown
= 0x2,
99 CsrProcessNormalPriority
= 0x10,
100 CsrProcessIdlePriority
= 0x20,
101 CsrProcessHighPriority
= 0x40,
102 CsrProcessRealtimePriority
= 0x80,
103 CsrProcessCreateNewGroup
= 0x100,
104 CsrProcessTerminated
= 0x200,
105 CsrProcessLastThreadTerminated
= 0x400,
106 CsrProcessIsConsoleApp
= 0x800
107 } CSR_PROCESS_FLAGS
, *PCSR_PROCESS_FLAGS
;
109 #define CsrProcessPriorityFlags (CsrProcessNormalPriority | \
110 CsrProcessIdlePriority | \
111 CsrProcessHighPriority | \
112 CsrProcessRealtimePriority)
114 typedef enum _CSR_THREAD_FLAGS
116 CsrThreadAltertable
= 0x1,
117 CsrThreadInTermination
= 0x2,
118 CsrThreadTerminated
= 0x4,
119 CsrThreadIsServerThread
= 0x10
120 } CSR_THREAD_FLAGS
, *PCSR_THREAD_FLAGS
;
122 typedef enum _SHUTDOWN_RESULT
124 CsrShutdownCsrProcess
= 1,
125 CsrShutdownNonCsrProcess
,
127 } SHUTDOWN_RESULT
, *PSHUTDOWN_RESULT
;
129 typedef enum _CSR_SHUTDOWN_FLAGS
131 CsrShutdownSystem
= 4,
133 } CSR_SHUTDOWN_FLAGS
, *PCSR_SHUTDOWN_FLAGS
;
135 typedef enum _CSR_DEBUG_FLAGS
137 CsrDebugOnlyThisProcess
= 1,
138 CsrDebugProcessChildren
= 2
139 } CSR_PROCESS_DEBUG_FLAGS
, *PCSR_PROCESS_DEBUG_FLAGS
;
147 (*CSR_WAIT_FUNCTION
)(
148 IN PLIST_ENTRY WaitList
,
149 IN PCSR_THREAD WaitThread
,
150 IN PCSR_API_MESSAGE WaitApiMessage
,
151 IN PVOID WaitContext
,
152 IN PVOID WaitArgument1
,
153 IN PVOID WaitArgument2
,
157 typedef struct _CSR_WAIT_BLOCK
161 LIST_ENTRY UserWaitList
;
163 PCSR_THREAD WaitThread
;
164 CSR_WAIT_FUNCTION WaitFunction
;
165 CSR_API_MESSAGE WaitApiMessage
;
166 } CSR_WAIT_BLOCK
, *PCSR_WAIT_BLOCK
;
170 * Server DLL structure
174 (NTAPI
*PCSR_API_ROUTINE
)(
175 IN OUT PCSR_API_MESSAGE ApiMessage
,
179 #define CSR_API(n) NTSTATUS NTAPI n( \
180 IN OUT PCSR_API_MESSAGE ApiMessage, \
182 // IN OUT PCSR_REPLY_STATUS ReplyStatus)
186 (NTAPI
*PCSR_CONNECT_CALLBACK
)(
187 IN PCSR_PROCESS CsrProcess
,
188 IN OUT PVOID ConnectionInfo
,
189 IN OUT PULONG ConnectionInfoLength
194 (NTAPI
*PCSR_DISCONNECT_CALLBACK
)(IN PCSR_PROCESS CsrProcess
);
198 (NTAPI
*PCSR_NEWPROCESS_CALLBACK
)(
199 IN PCSR_PROCESS Parent
,
200 IN PCSR_PROCESS CsrProcess
205 (NTAPI
*PCSR_HARDERROR_CALLBACK
)(
206 IN PCSR_THREAD CsrThread
,
207 IN PHARDERROR_MSG HardErrorMessage
212 (NTAPI
*PCSR_SHUTDOWNPROCESS_CALLBACK
)(
213 IN PCSR_PROCESS CsrProcess
,
215 IN BOOLEAN FirstPhase
218 typedef struct _CSR_SERVER_DLL
226 ULONG ApiBase
; // ApiNumberBase
227 ULONG HighestApiSupported
; // MaxApiNumber
228 PCSR_API_ROUTINE
*DispatchTable
;
229 PBOOLEAN ValidTable
; // Table of booleans which describe whether or not a server function call is valid when it is called via CsrCallServerFromServer.
231 ULONG SizeOfProcessData
;
232 PCSR_CONNECT_CALLBACK ConnectCallback
;
233 PCSR_DISCONNECT_CALLBACK DisconnectCallback
;
234 PCSR_HARDERROR_CALLBACK HardErrorCallback
;
235 PVOID SharedSection
; // SharedStaticServerData
236 PCSR_NEWPROCESS_CALLBACK NewProcessCallback
;
237 PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback
;
239 } CSR_SERVER_DLL
, *PCSR_SERVER_DLL
;
242 /* FUNCTION TYPES *************************************************************/
246 (NTAPI
*PCSR_SERVER_DLL_INIT_CALLBACK
)(IN PCSR_SERVER_DLL LoadedServerDll
);
248 #define CSR_SERVER_DLL_INIT(n) NTSTATUS NTAPI n(IN PCSR_SERVER_DLL LoadedServerDll)
251 /* PROTOTYPES ****************************************************************/
256 CsrCaptureArguments(IN PCSR_THREAD CsrThread
,
257 IN PCSR_API_MESSAGE ApiMessage
);
261 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage
);
268 CsrServerInitialization(IN ULONG ArgumentCount
,
269 IN PCHAR Arguments
[]);
273 CsrAddStaticServerThread(IN HANDLE hThread
,
274 IN PCLIENT_ID ClientId
,
275 IN ULONG ThreadFlags
);
279 CsrCallServerFromServer(IN PCSR_API_MESSAGE ReceiveMsg
,
280 IN OUT PCSR_API_MESSAGE ReplyMsg
);
284 CsrConnectToUser(VOID
);
288 CsrCreateProcess(IN HANDLE hProcess
,
290 IN PCLIENT_ID ClientId
,
291 IN PCSR_NT_SESSION NtSession
,
293 IN PCLIENT_ID DebugCid
);
297 CsrCreateRemoteThread(IN HANDLE hThread
,
298 IN PCLIENT_ID ClientId
);
302 CsrCreateThread(IN PCSR_PROCESS CsrProcess
,
304 IN PCLIENT_ID ClientId
);
308 CsrCreateWait(IN PLIST_ENTRY WaitList
,
309 IN CSR_WAIT_FUNCTION WaitFunction
,
310 IN PCSR_THREAD CsrWaitThread
,
311 IN OUT PCSR_API_MESSAGE WaitApiMessage
,
312 IN PVOID WaitContext
,
313 IN PLIST_ENTRY UserWaitList OPTIONAL
);
317 CsrDebugProcess(IN PCSR_PROCESS CsrProcess
);
321 CsrDebugProcessStop(IN PCSR_PROCESS CsrProcess
);
325 CsrDereferenceProcess(IN PCSR_PROCESS CsrProcess
);
329 CsrDereferenceThread(IN PCSR_THREAD CsrThread
);
333 CsrDereferenceWait(IN PLIST_ENTRY WaitList
);
337 CsrDestroyProcess(IN PCLIENT_ID Cid
,
338 IN NTSTATUS ExitStatus
);
342 CsrDestroyThread(IN PCLIENT_ID Cid
);
346 CsrExecServerThread(IN PVOID ThreadHandler
,
351 CsrGetProcessLuid(IN HANDLE hProcess OPTIONAL
,
356 CsrImpersonateClient(IN PCSR_THREAD CsrThread
);
360 CsrLockProcessByClientId(IN HANDLE Pid
,
361 OUT PCSR_PROCESS
*CsrProcess OPTIONAL
);
365 CsrLockThreadByClientId(IN HANDLE Tid
,
366 OUT PCSR_THREAD
*CsrThread
);
370 CsrMoveSatisfiedWait(IN PLIST_ENTRY NewEntry
,
371 IN PLIST_ENTRY WaitList
);
375 CsrNotifyWait(IN PLIST_ENTRY WaitList
,
377 IN PVOID WaitArgument1
,
378 IN PVOID WaitArgument2
);
382 CsrPopulateDosDevices(VOID
);
386 CsrQueryApiPort(VOID
);
390 CsrReferenceThread(IN PCSR_THREAD CsrThread
);
394 CsrRevertToSelf(VOID
);
398 CsrSetBackgroundPriority(IN PCSR_PROCESS CsrProcess
);
402 CsrSetCallingSpooler(ULONG Reserved
);
406 CsrSetForegroundPriority(IN PCSR_PROCESS CsrProcess
);
410 CsrShutdownProcesses(IN PLUID CallerLuid
,
413 EXCEPTION_DISPOSITION
415 CsrUnhandledExceptionFilter(IN PEXCEPTION_POINTERS ExceptionInfo
);
419 CsrUnlockProcess(IN PCSR_PROCESS CsrProcess
);
423 CsrUnlockThread(IN PCSR_THREAD CsrThread
);
427 CsrValidateMessageBuffer(IN PCSR_API_MESSAGE ApiMessage
,
429 IN ULONG ArgumentSize
,
430 IN ULONG ArgumentCount
);
434 CsrValidateMessageString(IN PCSR_API_MESSAGE ApiMessage
,
435 IN LPWSTR
*MessageString
);
443 #endif // _CSRSERVER_H