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 <csr/csrsrv.h>
17 extern RTL_CRITICAL_SECTION CsrProcessLock
, CsrWaitListsLock
;
19 #define CsrAcquireProcessLock() \
20 RtlEnterCriticalSection(&CsrProcessLock);
22 #define CsrReleaseProcessLock() \
23 RtlLeaveCriticalSection(&CsrProcessLock);
25 #define ProcessStructureListLocked() \
26 (CsrProcessLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
28 #define CsrAcquireWaitLock() \
29 RtlEnterCriticalSection(&CsrWaitListsLock);
31 #define CsrReleaseWaitLock() \
32 RtlLeaveCriticalSection(&CsrWaitListsLock);
34 #define CsrAcquireNtSessionLock() \
35 RtlEnterCriticalSection(&CsrNtSessionLock);
37 #define CsrReleaseNtSessionLock() \
38 RtlLeaveCriticalSection(&CsrNtSessionLock);
41 #define CSR_SERVER_DLL_MAX 4
45 *** Old structure. Deprecated.
47 typedef struct _CSRSS_API_DEFINITION
51 PCSR_API_ROUTINE Handler
;
52 } CSRSS_API_DEFINITION
, *PCSRSS_API_DEFINITION
;
54 #define CSRSS_DEFINE_API(Func, Handler) \
55 { Func, sizeof(CSRSS_##Func), Handler }
60 typedef struct _CSRSS_LISTEN_DATA
63 ULONG ApiDefinitionsCount
;
64 PCSRSS_API_DEFINITION
*ApiDefinitions
;
65 } CSRSS_LISTEN_DATA
, *PCSRSS_LISTEN_DATA
;
70 /******************************************************************************
71 ******************************************************************************
72 ******************************************************************************/
75 extern HANDLE hBootstrapOk
;
76 extern HANDLE CsrApiPort
;
77 extern HANDLE CsrSmApiPort
;
78 extern HANDLE CsrSbApiPort
;
79 extern LIST_ENTRY CsrThreadHashTable
[256];
80 extern PCSR_PROCESS CsrRootProcess
;
81 extern UNICODE_STRING CsrDirectoryName
;
82 extern ULONG CsrDebug
;
83 extern ULONG CsrTotalPerProcessDataLength
;
84 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo
;
85 extern HANDLE CsrHeap
;
86 extern PVOID CsrSrvSharedSectionHeap
;
87 extern PVOID
*CsrSrvSharedStaticServerData
;
88 extern HANDLE CsrInitializationEvent
;
89 extern PCSR_SERVER_DLL CsrLoadedServerDll
[CSR_SERVER_DLL_MAX
];
90 extern ULONG CsrMaxApiRequestThreads
;
92 /****************************************************/
93 extern UNICODE_STRING CsrSbApiPortName
;
94 extern UNICODE_STRING CsrApiPortName
;
95 extern RTL_CRITICAL_SECTION CsrProcessLock
;
96 extern RTL_CRITICAL_SECTION CsrWaitListsLock
;
97 extern HANDLE CsrObjectDirectory
;
98 extern PSB_API_ROUTINE CsrServerSbApiDispatch
[5];
99 /****************************************************/
103 CSR_API(CsrSrvClientConnect
);
104 CSR_API(CsrSrvUnusedFunction
);
105 CSR_API(CsrSrvIdentifyAlertableThread
);
106 CSR_API(CsrSrvSetPriorityClass
);
114 IN PCSR_THREAD CsrThread,
115 IN PCSR_API_MESSAGE ApiMessage
120 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage);
124 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll);
130 CsrLoadServerDll(IN PCHAR DllString
,
131 IN PCHAR EntryPoint OPTIONAL
,
137 CsrAllocateThread(IN PCSR_PROCESS CsrProcess
);
141 CsrAllocateProcess(VOID
);
145 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess
);
149 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess
);
153 CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL
,
154 IN PCSR_PROCESS CurrentProcess OPTIONAL
,
155 IN PCSR_PROCESS CsrProcess
);
159 NTSTATUS FASTCALL
CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions
);
162 VOID FASTCALL
CsrApiCallHandler(IN OUT PCSR_API_MESSAGE ApiMessage
, OUT PULONG Reply
);
166 CsrApiRequestThread(IN PVOID Parameter
); // HANDLE ServerPort ??
170 CsrSbApiRequestThread(IN PVOID Parameter
);
174 CsrApiPortInitialize(VOID
);
178 ProtectHandle(IN HANDLE ObjectHandle
);
182 UnProtectHandle(IN HANDLE ObjectHandle
);
186 CsrInsertThread(IN PCSR_PROCESS Process
,
187 IN PCSR_THREAD Thread
);
191 CsrLockedReferenceProcess(IN PCSR_PROCESS CsrProcess
);
195 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread
);
199 CsrInitializeProcessStructure(VOID
);
201 // NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc,
205 CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL
,
209 CsrLocateThreadByClientId(OUT PCSR_PROCESS
*Process OPTIONAL
,
210 IN PCLIENT_ID ClientId
);
215 CsrProcessRefcountZero(IN PCSR_PROCESS CsrProcess
);
220 CsrThreadRefcountZero(IN PCSR_THREAD CsrThread
);
224 CsrInitializeNtSessionList(VOID
);
228 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL
,
229 OUT PCSR_CONNECTION_INFO ConnectInfo
);
233 CsrSrvCreateSharedSection(IN PCHAR ParameterValue
);
237 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess
);
241 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread
);
245 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock
,
246 IN PLIST_ENTRY WaitList
,
247 IN PVOID WaitArgument1
,
248 IN PVOID WaitArgument2
,
250 IN BOOLEAN DereferenceThread
);
254 CsrReferenceNtSession(IN PCSR_NT_SESSION Session
);
258 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session
,
259 IN NTSTATUS ExitStatus
);
261 /******************************************************************************
262 ******************************************************************************/
266 CsrCreateSessionObjectDirectory(IN ULONG SessionId
);
270 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory
);
274 CsrSbApiPortInitialize(VOID
);
278 CsrSbCreateSession(IN PSB_API_MSG ApiMessage
);
282 CsrSbTerminateSession(IN PSB_API_MSG ApiMessage
);
286 CsrSbForeignSessionComplete(IN PSB_API_MSG ApiMessage
);
290 CsrSbCreateProcess(IN PSB_API_MSG ApiMessage
);
294 CsrSbApiHandleConnectionRequest(IN PSB_API_MSG Message
);
298 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage
);
300 /** this API is used with CsrPopulateDosDevices, deprecated in r55585.
303 CsrPopulateDosDevicesDirectory(IN HANDLE DosDevicesDirectory,
304 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap);
309 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR
*LocalSystemSd
);
313 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory
);