2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: subsys/csrss/include/api.h
5 * PURPOSE: CSRSS API interface
10 #define NTOS_MODE_USER
11 #include <ndk/psfuncs.h>
12 #include <ndk/rtlfuncs.h>
14 #include <csrss/server.h>
17 #define CsrAcquireProcessLock() \
18 RtlEnterCriticalSection(&CsrProcessLock);
20 #define CsrReleaseProcessLock() \
21 RtlLeaveCriticalSection(&CsrProcessLock);
23 #define ProcessStructureListLocked() \
24 (CsrProcessLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
26 #define CsrAcquireWaitLock() \
27 RtlEnterCriticalSection(&CsrWaitListsLock);
29 #define CsrReleaseWaitLock() \
30 RtlLeaveCriticalSection(&CsrWaitListsLock);
32 #define CsrAcquireNtSessionLock() \
33 RtlEnterCriticalSection(&CsrNtSessionLock);
35 #define CsrReleaseNtSessionLock() \
36 RtlLeaveCriticalSection(&CsrNtSessionLock);
40 typedef struct _CSRSS_API_DEFINITION
44 PCSR_API_ROUTINE Handler
;
45 } CSRSS_API_DEFINITION
, *PCSRSS_API_DEFINITION
;
47 #define CSRSS_DEFINE_API(Func, Handler) \
48 { Func, sizeof(CSRSS_##Func), Handler }
52 typedef struct _CSRSS_LISTEN_DATA
55 ULONG ApiDefinitionsCount
;
56 PCSRSS_API_DEFINITION
*ApiDefinitions
;
57 } CSRSS_LISTEN_DATA
, *PCSRSS_LISTEN_DATA
;
62 /******************************************************************************
63 ******************************************************************************
64 ******************************************************************************/
69 extern HANDLE hBootstrapOk
;
70 NTSTATUS NTAPI
CsrServerInitialization(ULONG ArgumentCount
, PCHAR Arguments
[]);
73 CSR_API(CsrConnectProcess
);
74 CSR_API(CsrSrvCreateProcess
);
75 CSR_API(CsrTerminateProcess
);
76 CSR_API(CsrSrvCreateThread
);
77 CSR_API(CsrGetShutdownParameters
);
78 CSR_API(CsrSetShutdownParameters
);
82 CsrSetBackgroundPriority(IN PCSR_PROCESS CsrProcess
);
86 CsrAllocateThread(IN PCSR_PROCESS CsrProcess
);
90 CsrAllocateProcess(VOID
);
94 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess
);
98 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess
);
102 CsrDereferenceThread(IN PCSR_THREAD CsrThread
);
106 CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL
,
107 IN PCSR_PROCESS CurrentProcess OPTIONAL
,
108 IN PCSR_PROCESS CsrProcess
);
112 NTSTATUS FASTCALL
CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions
);
113 VOID FASTCALL
CsrApiCallHandler(IN OUT PCSR_API_MESSAGE ApiMessage
, OUT PULONG Reply
);
114 VOID WINAPI
CsrSbApiRequestThread (PVOID PortHandle
);
115 VOID NTAPI
ClientConnectionThread(HANDLE ServerPort
);
117 extern HANDLE CsrApiPort
;
118 extern HANDLE CsrSmApiPort
;
119 extern HANDLE CsrSbApiPort
;
120 extern LIST_ENTRY CsrThreadHashTable
[256];
121 extern PCSR_PROCESS CsrRootProcess
;
122 extern RTL_CRITICAL_SECTION CsrProcessLock
, CsrWaitListsLock
;
123 extern UNICODE_STRING CsrDirectoryName
;
124 extern ULONG CsrDebug
;
125 extern ULONG CsrTotalPerProcessDataLength
;
126 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo
;
127 extern PVOID CsrSrvSharedSectionHeap
;
128 extern PVOID
*CsrSrvSharedStaticServerData
;
129 extern HANDLE CsrInitializationEvent
;
130 extern PCSR_SERVER_DLL CsrLoadedServerDll
[CSR_SERVER_DLL_MAX
];
131 extern ULONG CsrMaxApiRequestThreads
;
135 CsrApiPortInitialize(VOID
);
139 CsrCreateProcess(IN HANDLE hProcess
,
141 IN PCLIENT_ID ClientId
,
142 IN PCSR_NT_SESSION NtSession
,
144 IN PCLIENT_ID DebugCid
);
148 ProtectHandle(IN HANDLE ObjectHandle
);
152 CsrInsertThread(IN PCSR_PROCESS Process
,
153 IN PCSR_THREAD Thread
);
157 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread
);
160 typedef NTSTATUS (WINAPI
*CSRSS_ENUM_PROCESS_PROC
)(PCSR_PROCESS ProcessData
,
162 NTSTATUS WINAPI
CsrInitializeProcessStructure(VOID
);
164 NTSTATUS WINAPI
CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc
, PVOID Context
);
165 PCSR_THREAD NTAPI
CsrAddStaticServerThread(IN HANDLE hThread
, IN PCLIENT_ID ClientId
, IN ULONG ThreadFlags
);
166 PCSR_THREAD NTAPI
CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL
, IN PCLIENT_ID Cid
);
167 PCSR_THREAD NTAPI
CsrLocateThreadByClientId(OUT PCSR_PROCESS
*Process OPTIONAL
, IN PCLIENT_ID ClientId
);
168 NTSTATUS NTAPI
CsrLockProcessByClientId(IN HANDLE Pid
, OUT PCSR_PROCESS
*CsrProcess OPTIONAL
);
169 NTSTATUS NTAPI
CsrCreateThread(IN PCSR_PROCESS CsrProcess
, IN HANDLE hThread
, IN PCLIENT_ID ClientId
);
170 NTSTATUS NTAPI
CsrUnlockProcess(IN PCSR_PROCESS CsrProcess
);
173 VOID NTAPI
CsrThreadRefcountZero(IN PCSR_THREAD CsrThread
);
177 CsrInitializeNtSessionList(VOID
);
181 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL
,
182 OUT PCSR_CONNECTION_INFO ConnectInfo
);
186 CsrSrvCreateSharedSection(IN PCHAR ParameterValue
);
191 IN OUT PCSR_API_MESSAGE ApiMessage
,
197 CsrSrvUnusedFunction(
198 IN OUT PCSR_API_MESSAGE ApiMessage
,
204 CsrSrvIdentifyAlertableThread(
205 IN OUT PCSR_API_MESSAGE ApiMessage
,
211 CsrSrvSetPriorityClass(
212 IN OUT PCSR_API_MESSAGE ApiMessage
,
218 CsrDestroyProcess(IN PCLIENT_ID Cid
,
219 IN NTSTATUS ExitStatus
);
223 CsrDestroyThread(IN PCLIENT_ID Cid
);
227 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread
);
231 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock
,
232 IN PLIST_ENTRY WaitList
,
233 IN PVOID WaitArgument1
,
234 IN PVOID WaitArgument2
,
236 IN BOOLEAN DereferenceThread
);
240 CsrReferenceNtSession(IN PCSR_NT_SESSION Session
);
244 CsrUnhandledExceptionFilter(IN PEXCEPTION_POINTERS ExceptionInfo
);
248 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session
,
249 IN NTSTATUS ExitStatus
);
253 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess
);
257 CsrDereferenceProcess(IN PCSR_PROCESS CsrProcess
);
261 CsrLoadServerDll(IN PCHAR DllString
,
262 IN PCHAR EntryPoint OPTIONAL
,
266 CSR_API(CsrRegisterServicesProcess
);