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 _CSRSS_PROCESS_DATA
49 struct tagCSRSS_CONSOLE
*Console
;
50 struct tagCSRSS_CONSOLE
*ParentConsole
;
52 RTL_CRITICAL_SECTION HandleTableLock
;
53 ULONG HandleTableSize
;
54 struct _CSRSS_HANDLE
*HandleTable
;
61 PVOID CsrSectionViewBase
;
62 ULONG CsrSectionViewSize
;
63 HANDLE ServerCommunicationPort
;
64 struct _CSRSS_PROCESS_DATA
* next
;
65 LIST_ENTRY ProcessEntry
;
66 PCONTROLDISPATCHER CtrlDispatcher
;
70 LIST_ENTRY ThreadList
;
71 } CSRSS_PROCESS_DATA
, *PCSRSS_PROCESS_DATA
;
73 typedef struct _CSR_THREAD
75 LARGE_INTEGER CreateTime
;
79 PCSRSS_PROCESS_DATA Process
;
80 //struct _CSR_WAIT_BLOCK *WaitBlock;
84 ULONG ImpersonationCount
;
85 } CSR_THREAD
, *PCSR_THREAD
;
87 typedef NTSTATUS (WINAPI
*CSRSS_API_PROC
)(PCSRSS_PROCESS_DATA ProcessData
,
88 PCSR_API_MESSAGE Request
);
90 typedef struct _CSRSS_API_DEFINITION
94 CSRSS_API_PROC Handler
;
95 } CSRSS_API_DEFINITION
, *PCSRSS_API_DEFINITION
;
97 #define CSRSS_DEFINE_API(Func, Handler) \
98 { Func, sizeof(CSRSS_##Func), Handler }
100 typedef struct _CSRSS_LISTEN_DATA
102 HANDLE ApiPortHandle
;
103 ULONG ApiDefinitionsCount
;
104 PCSRSS_API_DEFINITION
*ApiDefinitions
;
105 } CSRSS_LISTEN_DATA
, *PCSRSS_LISTEN_DATA
;
107 #define CSR_API(n) NTSTATUS WINAPI n (\
108 PCSRSS_PROCESS_DATA ProcessData,\
109 PCSR_API_MESSAGE Request)
112 extern HANDLE hBootstrapOk
;
113 NTSTATUS NTAPI
CsrServerInitialization(ULONG ArgumentCount
, PCHAR Arguments
[]);
116 CSR_API(CsrConnectProcess
);
117 CSR_API(CsrCreateProcess
);
118 CSR_API(CsrTerminateProcess
);
119 CSR_API(CsrSrvCreateThread
);
120 CSR_API(CsrGetShutdownParameters
);
121 CSR_API(CsrSetShutdownParameters
);
124 NTSTATUS FASTCALL
CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions
);
125 VOID FASTCALL
CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData
,
126 PCSR_API_MESSAGE Request
);
127 DWORD WINAPI
ServerSbApiPortThread (PVOID PortHandle
);
128 VOID NTAPI
ClientConnectionThread(HANDLE ServerPort
);
130 extern HANDLE CsrssApiHeap
;
133 typedef NTSTATUS (WINAPI
*CSRSS_ENUM_PROCESS_PROC
)(PCSRSS_PROCESS_DATA ProcessData
,
135 VOID WINAPI
CsrInitProcessData(VOID
);
136 PCSRSS_PROCESS_DATA WINAPI
CsrGetProcessData(HANDLE ProcessId
);
137 PCSRSS_PROCESS_DATA WINAPI
CsrCreateProcessData(HANDLE ProcessId
);
138 NTSTATUS WINAPI
CsrFreeProcessData( HANDLE Pid
);
139 NTSTATUS WINAPI
CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc
, PVOID Context
);
140 PCSR_THREAD NTAPI
CsrAddStaticServerThread(IN HANDLE hThread
, IN PCLIENT_ID ClientId
, IN ULONG ThreadFlags
);
141 PCSR_THREAD NTAPI
CsrLocateThreadInProcess(IN PCSRSS_PROCESS_DATA CsrProcess OPTIONAL
, IN PCLIENT_ID Cid
);
142 PCSR_THREAD NTAPI
CsrLocateThreadByClientId(OUT PCSRSS_PROCESS_DATA
*Process OPTIONAL
, IN PCLIENT_ID ClientId
);
143 NTSTATUS NTAPI
CsrLockProcessByClientId(IN HANDLE Pid
, OUT PCSRSS_PROCESS_DATA
*CsrProcess OPTIONAL
);
144 NTSTATUS NTAPI
CsrCreateThread(IN PCSRSS_PROCESS_DATA CsrProcess
, IN HANDLE hThread
, IN PCLIENT_ID ClientId
);
145 NTSTATUS NTAPI
CsrUnlockProcess(IN PCSRSS_PROCESS_DATA CsrProcess
);
148 VOID NTAPI
CsrThreadRefcountZero(IN PCSR_THREAD CsrThread
);
151 CSR_API(CsrRegisterServicesProcess
);