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
11 #define NTOS_MODE_USER
12 #include <ndk/ntndk.h>
14 #include <csrss/csrss.h>
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_PROCESS_FLAGS
39 CsrProcessTerminating
= 0x1,
40 CsrProcessSkipShutdown
= 0x2,
41 CsrProcessCreateNewGroup
= 0x100,
42 CsrProcessTerminated
= 0x200,
43 CsrProcessLastThreadTerminated
= 0x400,
44 CsrProcessIsConsoleApp
= 0x800
45 } CSR_PROCESS_FLAGS
, *PCSR_PROCESS_FLAGS
;
47 typedef struct Object_tt
51 CRITICAL_SECTION Lock
;
54 typedef struct ConsoleInput_t
57 INPUT_RECORD InputEvent
;
58 BOOLEAN Echoed
; // already been echoed or not
59 BOOLEAN Fake
; // synthesized, not a real event
60 BOOLEAN NotChar
; // message should not be used to return a character
63 typedef struct tagCSRSS_CONSOLE
*PCSRSS_CONSOLE
;
65 typedef struct _CSRSS_HANDLE
70 } CSRSS_HANDLE
, *PCSRSS_HANDLE
;
72 typedef struct _CSRSS_PROCESS_DATA
74 PCSRSS_CONSOLE Console
;
75 PCSRSS_CONSOLE ParentConsole
;
77 RTL_CRITICAL_SECTION HandleTableLock
;
78 ULONG HandleTableSize
;
79 PCSRSS_HANDLE HandleTable
;
86 PVOID CsrSectionViewBase
;
87 ULONG CsrSectionViewSize
;
88 HANDLE ServerCommunicationPort
;
89 struct _CSRSS_PROCESS_DATA
* next
;
90 LIST_ENTRY ProcessEntry
;
91 PCONTROLDISPATCHER CtrlDispatcher
;
95 LIST_ENTRY ThreadList
;
96 } CSRSS_PROCESS_DATA
, *PCSRSS_PROCESS_DATA
;
98 typedef struct _CSR_THREAD
100 LARGE_INTEGER CreateTime
;
102 LIST_ENTRY HashLinks
;
104 PCSRSS_PROCESS_DATA Process
;
105 //struct _CSR_WAIT_BLOCK *WaitBlock;
108 ULONG ReferenceCount
;
109 ULONG ImpersonationCount
;
110 } CSR_THREAD
, *PCSR_THREAD
;
112 typedef VOID (WINAPI
*CSR_CLEANUP_OBJECT_PROC
)(Object_t
*Object
);
114 typedef struct tagCSRSS_OBJECT_DEFINITION
117 CSR_CLEANUP_OBJECT_PROC CsrCleanupObjectProc
;
118 } CSRSS_OBJECT_DEFINITION
, *PCSRSS_OBJECT_DEFINITION
;
120 typedef NTSTATUS (WINAPI
*CSRSS_API_PROC
)(PCSRSS_PROCESS_DATA ProcessData
,
121 PCSR_API_MESSAGE Request
);
123 typedef struct _CSRSS_API_DEFINITION
126 ULONG MinRequestSize
;
127 CSRSS_API_PROC Handler
;
128 } CSRSS_API_DEFINITION
, *PCSRSS_API_DEFINITION
;
130 #define CSRSS_DEFINE_API(Func, Handler) \
131 { Func, sizeof(CSRSS_##Func), Handler }
133 typedef struct _CSRSS_LISTEN_DATA
135 HANDLE ApiPortHandle
;
136 ULONG ApiDefinitionsCount
;
137 PCSRSS_API_DEFINITION
*ApiDefinitions
;
138 } CSRSS_LISTEN_DATA
, *PCSRSS_LISTEN_DATA
;
140 #define CSR_API(n) NTSTATUS WINAPI n (\
141 PCSRSS_PROCESS_DATA ProcessData,\
142 PCSR_API_MESSAGE Request)
145 extern HANDLE hBootstrapOk
;
148 CSR_API(CsrConnectProcess
);
149 CSR_API(CsrCreateProcess
);
150 CSR_API(CsrTerminateProcess
);
151 CSR_API(CsrSrvCreateThread
);
154 VOID WINAPI
DisplayString(LPCWSTR lpwString
);
155 VOID WINAPI
PrintString (char* fmt
, ...);
158 NTSTATUS FASTCALL
CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions
);
159 VOID FASTCALL
CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData
,
160 PCSR_API_MESSAGE Request
);
161 DWORD WINAPI
ServerApiPortThread (PVOID PortHandle
);
162 DWORD WINAPI
ServerSbApiPortThread (PVOID PortHandle
);
163 DWORD WINAPI
Console_Api( PVOID unused
);
166 ClientConnectionThread(HANDLE ServerPort
);
168 extern HANDLE CsrssApiHeap
;
171 VOID WINAPI
CsrInitConsoleSupport(VOID
);
174 typedef NTSTATUS (WINAPI
*CSRSS_ENUM_PROCESS_PROC
)(PCSRSS_PROCESS_DATA ProcessData
,
176 VOID WINAPI
CsrInitProcessData(VOID
);
177 PCSRSS_PROCESS_DATA WINAPI
CsrGetProcessData(HANDLE ProcessId
);
178 PCSRSS_PROCESS_DATA WINAPI
CsrCreateProcessData(HANDLE ProcessId
);
179 NTSTATUS WINAPI
CsrFreeProcessData( HANDLE Pid
);
180 NTSTATUS WINAPI
CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc
, PVOID Context
);
181 PCSR_THREAD NTAPI
CsrAddStaticServerThread(IN HANDLE hThread
, IN PCLIENT_ID ClientId
, IN ULONG ThreadFlags
);
182 PCSR_THREAD NTAPI
CsrLocateThreadInProcess(IN PCSRSS_PROCESS_DATA CsrProcess OPTIONAL
, IN PCLIENT_ID Cid
);
183 PCSR_THREAD NTAPI
CsrLocateThreadByClientId(OUT PCSRSS_PROCESS_DATA
*Process OPTIONAL
, IN PCLIENT_ID ClientId
);
184 NTSTATUS NTAPI
CsrLockProcessByClientId(IN HANDLE Pid
, OUT PCSRSS_PROCESS_DATA
*CsrProcess OPTIONAL
);
185 NTSTATUS NTAPI
CsrCreateThread(IN PCSRSS_PROCESS_DATA CsrProcess
, IN HANDLE hThread
, IN PCLIENT_ID ClientId
);
186 NTSTATUS NTAPI
CsrUnlockProcess(IN PCSRSS_PROCESS_DATA CsrProcess
);
189 NTSTATUS FASTCALL
CsrRegisterObjectDefinitions(PCSRSS_OBJECT_DEFINITION NewDefinitions
);
190 NTSTATUS WINAPI
CsrInsertObject( PCSRSS_PROCESS_DATA ProcessData
, PHANDLE Handle
, Object_t
*Object
, DWORD Access
, BOOL Inheritable
);
191 NTSTATUS WINAPI
CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData
, PCSRSS_PROCESS_DATA TargetProcessData
);
192 NTSTATUS WINAPI
CsrGetObject( PCSRSS_PROCESS_DATA ProcessData
, HANDLE Handle
, Object_t
**Object
, DWORD Access
);
193 NTSTATUS NTAPI
CsrServerInitialization(ULONG ArgumentCount
, PCHAR Arguments
[]);
194 NTSTATUS WINAPI
CsrReleaseObjectByPointer(Object_t
*Object
);
195 NTSTATUS WINAPI
CsrReleaseObject( PCSRSS_PROCESS_DATA ProcessData
, HANDLE Object
);
196 NTSTATUS WINAPI
CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData
, HANDLE Object
);
199 VOID NTAPI
CsrThreadRefcountZero(IN PCSR_THREAD CsrThread
);
201 CSR_API(CsrGetInputHandle
);
202 CSR_API(CsrGetOutputHandle
);
203 CSR_API(CsrCloseHandle
);
204 CSR_API(CsrVerifyHandle
);
205 CSR_API(CsrDuplicateHandle
);
206 CSR_API(CsrGetInputWaitHandle
);
209 CSR_API(CsrRegisterServicesProcess
);
210 CSR_API(CsrExitReactos
);
211 CSR_API(CsrGetShutdownParameters
);
212 CSR_API(CsrSetShutdownParameters
);
214 CSR_API(CsrSetLogonNotifyWindow
);
215 CSR_API(CsrRegisterLogonProcess
);