4 #define CSR_SRV_SERVER 0
6 typedef enum _CSR_PROCESS_FLAGS
8 CsrProcessTerminating
= 0x1,
9 CsrProcessSkipShutdown
= 0x2,
10 CsrProcessCreateNewGroup
= 0x100,
11 CsrProcessTerminated
= 0x200,
12 CsrProcessLastThreadTerminated
= 0x400,
13 CsrProcessIsConsoleApp
= 0x800
14 } CSR_PROCESS_FLAGS
, *PCSR_PROCESS_FLAGS
;
16 typedef enum _CSR_THREAD_FLAGS
18 CsrThreadAltertable
= 0x1,
19 CsrThreadInTermination
= 0x2,
20 CsrThreadTerminated
= 0x4,
21 CsrThreadIsServerThread
= 0x10
22 } CSR_THREAD_FLAGS
, *PCSR_THREAD_FLAGS
;
24 typedef enum _SHUTDOWN_RESULT
26 CsrShutdownCsrProcess
= 1,
27 CsrShutdownNonCsrProcess
,
29 } SHUTDOWN_RESULT
, *PSHUTDOWN_RESULT
;
31 typedef enum _CSR_SHUTDOWN_FLAGS
33 CsrShutdownSystem
= 4,
35 } CSR_SHUTDOWN_FLAGS
, *PCSR_SHUTDOWN_FLAGS
;
37 typedef enum _CSR_DEBUG_FLAGS
39 CsrDebugOnlyThisProcess
= 1,
40 CsrDebugProcessChildren
= 2
41 } CSR_PROCESS_DEBUG_FLAGS
, *PCSR_PROCESS_DEBUG_FLAGS
;
43 typedef struct _CSR_NT_SESSION
46 LIST_ENTRY SessionList
;
48 } CSR_NT_SESSION
, *PCSR_NT_SESSION
;
50 typedef struct _CSR_PROCESS
54 LIST_ENTRY ThreadList
;
55 struct _CSR_PROCESS
*Parent
;
56 PCSR_NT_SESSION NtSession
;
57 ULONG ExpectedVersion
;
59 ULONG_PTR ClientViewBase
;
60 ULONG_PTR ClientViewBounds
;
68 ULONG ProcessGroupSequence
;
76 } CSR_PROCESS
, *PCSR_PROCESS
;
78 typedef struct _CSR_THREAD
80 LARGE_INTEGER CreateTime
;
85 struct _CSR_WAIT_BLOCK
*WaitBlock
;
89 ULONG ImpersonationCount
;
90 } CSR_THREAD
, *PCSR_THREAD
;
94 (*PCSR_CONNECT_CALLBACK
)(
95 IN PCSR_PROCESS CsrProcess
,
96 IN OUT PVOID ConnectionInfo
,
97 IN OUT PULONG ConnectionInfoLength
102 (*PCSR_DISCONNECT_CALLBACK
)(IN PCSR_PROCESS CsrProcess
);
106 (*PCSR_NEWPROCESS_CALLBACK
)(
107 IN PCSR_PROCESS Parent
,
108 IN PCSR_PROCESS CsrProcess
113 (*PCSR_HARDERROR_CALLBACK
)(
114 IN PCSR_THREAD CsrThread
,
115 IN PHARDERROR_MSG HardErrorMessage
120 (*PCSR_SHUTDOWNPROCESS_CALLBACK
)(
121 IN PCSR_PROCESS CsrProcess
,
123 IN BOOLEAN FirstPhase
126 /* FIXME: Put into public NDK Header */
127 typedef ULONG CSR_API_NUMBER
;
129 #define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m)
130 #define CSR_API_ID_FROM_OPCODE(n) ((ULONG)((USHORT)(n)))
131 #define CSR_SERVER_ID_FROM_OPCODE(n) (ULONG)((n) >> 16)
133 typedef struct _CSR_CONNECTION_INFO
136 HANDLE ObjectDirectory
;
137 PVOID SharedSectionBase
;
138 PVOID SharedSectionHeap
;
139 PVOID SharedSectionData
;
143 } CSR_CONNECTION_INFO
, *PCSR_CONNECTION_INFO
;
145 typedef struct _CSR_CLIENT_CONNECT
148 PVOID ConnectionInfo
;
149 ULONG ConnectionInfoSize
;
150 } CSR_CLIENT_CONNECT
, *PCSR_CLIENT_CONNECT
;
152 typedef struct _CSR_API_MESSAGE
157 CSR_CONNECTION_INFO ConnectionInfo
;
160 PVOID CsrCaptureData
;
161 CSR_API_NUMBER Opcode
;
166 CSR_CLIENT_CONNECT CsrClientConnect
;
170 } CSR_API_MESSAGE
, *PCSR_API_MESSAGE
;
172 typedef struct _CSR_CAPTURE_BUFFER
175 struct _CSR_CAPTURE_BUFFER
*PreviousCaptureBuffer
;
178 } CSR_CAPTURE_BUFFER
, *PCSR_CAPTURE_BUFFER
;
180 /* Private data resumes here */
183 (NTAPI
*PCSR_API_ROUTINE
)(
184 IN OUT PCSR_API_MESSAGE ApiMessage
,
188 typedef struct _CSR_SERVER_DLL
197 ULONG HighestApiSupported
;
198 PCSR_API_ROUTINE
*DispatchTable
;
201 ULONG SizeOfProcessData
;
202 PCSR_CONNECT_CALLBACK ConnectCallback
;
203 PCSR_DISCONNECT_CALLBACK DisconnectCallback
;
204 PCSR_HARDERROR_CALLBACK HardErrorCallback
;
206 PCSR_NEWPROCESS_CALLBACK NewProcessCallback
;
207 PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback
;
209 } CSR_SERVER_DLL
, *PCSR_SERVER_DLL
;
213 (NTAPI
*PCSR_SERVER_DLL_INIT_CALLBACK
)(IN PCSR_SERVER_DLL ServerDll
);
217 (*CSR_WAIT_FUNCTION
)(
218 IN PLIST_ENTRY WaitList
,
219 IN PCSR_THREAD WaitThread
,
220 IN PCSR_API_MESSAGE WaitApiMessage
,
221 IN PVOID WaitContext
,
222 IN PVOID WaitArgument1
,
223 IN PVOID WaitArgument2
,
227 typedef struct _CSR_WAIT_BLOCK
231 LIST_ENTRY UserWaitList
;
233 PCSR_THREAD WaitThread
;
234 CSR_WAIT_FUNCTION WaitFunction
;
235 CSR_API_MESSAGE WaitApiMessage
;
236 } CSR_WAIT_BLOCK
, *PCSR_WAIT_BLOCK
;
238 /* FIXME: Put into new SM headers */
239 typedef struct _SB_CREATE_SESSION
242 RTL_USER_PROCESS_INFORMATION ProcessInfo
;
243 } SB_CREATE_SESSION
, *PSB_CREATE_SESSION
;
245 typedef struct _SB_TERMINATE_SESSION
248 } SB_TERMINATE_SESSION
, *PSB_TERMINATE_SESSION
;
250 typedef struct _SB_FOREIGN_SESSION_COMPLETE
253 } SB_FOREIGN_SESSION_COMPLETE
, *PSB_FOREIGN_SESSION_COMPLETE
;
255 typedef struct _SB_CREATE_PROCESS
258 } SB_CREATE_PROCESS
, *PSB_CREATE_PROCESS
;
260 typedef struct _SB_CONNECTION_INFO
263 } SB_CONNECTION_INFO
, *PSB_CONNECTION_INFO
;
265 typedef struct _SB_API_MESSAGE
270 SB_CONNECTION_INFO ConnectionInfo
;
277 SB_CREATE_SESSION SbCreateSession
;
278 SB_TERMINATE_SESSION SbTerminateSession
;
279 SB_FOREIGN_SESSION_COMPLETE SbForeignSessionComplete
;
280 SB_CREATE_PROCESS SbCreateProcess
;
284 } SB_API_MESSAGE
, *PSB_API_MESSAGE
;
288 (NTAPI
*PSB_API_ROUTINE
)(IN PSB_API_MESSAGE ApiMessage
);
301 IN PUNICODE_STRING SbApiPortName OPTIONAL
,
302 IN HANDLE hSbApiPort OPTIONAL
,
303 IN ULONG SubsystemType OPTIONAL
,
304 OUT PHANDLE hSmApiPort