2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: subsystems/win32/csrsrv/api.h
5 * PURPOSE: CSRSS Internal API
10 extern RTL_CRITICAL_SECTION CsrProcessLock
, CsrWaitListsLock
;
12 #define CsrAcquireProcessLock() \
13 RtlEnterCriticalSection(&CsrProcessLock);
15 #define CsrReleaseProcessLock() \
16 RtlLeaveCriticalSection(&CsrProcessLock);
18 #define ProcessStructureListLocked() \
19 (CsrProcessLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
21 #define CsrAcquireWaitLock() \
22 RtlEnterCriticalSection(&CsrWaitListsLock);
24 #define CsrReleaseWaitLock() \
25 RtlLeaveCriticalSection(&CsrWaitListsLock);
27 #define CsrAcquireNtSessionLock() \
28 RtlEnterCriticalSection(&CsrNtSessionLock);
30 #define CsrReleaseNtSessionLock() \
31 RtlLeaveCriticalSection(&CsrNtSessionLock);
34 #define CSR_SERVER_DLL_MAX 4
38 extern ULONG CsrDebug
;
40 extern HANDLE hBootstrapOk
;
41 extern HANDLE CsrApiPort
;
42 extern HANDLE CsrSmApiPort
;
43 extern HANDLE CsrSbApiPort
;
44 #define NUMBER_THREAD_HASH_BUCKETS 257
45 extern LIST_ENTRY CsrThreadHashTable
[NUMBER_THREAD_HASH_BUCKETS
];
46 extern PCSR_PROCESS CsrRootProcess
;
47 extern UNICODE_STRING CsrDirectoryName
;
48 extern ULONG CsrTotalPerProcessDataLength
;
49 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo
;
50 extern HANDLE CsrHeap
;
51 extern PVOID CsrSrvSharedSectionHeap
;
52 extern PVOID
*CsrSrvSharedStaticServerData
;
53 extern HANDLE CsrInitializationEvent
;
54 extern PCSR_SERVER_DLL CsrLoadedServerDll
[CSR_SERVER_DLL_MAX
];
55 extern ULONG CsrMaxApiRequestThreads
;
57 /****************************************************/
58 extern UNICODE_STRING CsrSbApiPortName
;
59 extern UNICODE_STRING CsrApiPortName
;
60 extern RTL_CRITICAL_SECTION CsrProcessLock
;
61 extern RTL_CRITICAL_SECTION CsrWaitListsLock
;
62 extern HANDLE CsrObjectDirectory
;
63 /****************************************************/
67 CSR_API(CsrSrvClientConnect
);
68 CSR_API(CsrSrvUnusedFunction
);
69 CSR_API(CsrSrvIdentifyAlertableThread
);
70 CSR_API(CsrSrvSetPriorityClass
);
75 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll
);
80 CsrCaptureArguments(IN PCSR_THREAD CsrThread
,
81 IN PCSR_API_MESSAGE ApiMessage
);
85 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage
);
89 CsrLoadServerDll(IN PCHAR DllString
,
90 IN PCHAR EntryPoint OPTIONAL
,
96 CsrAllocateThread(IN PCSR_PROCESS CsrProcess
);
100 CsrAllocateProcess(VOID
);
104 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess
);
108 CsrInsertProcess(IN PCSR_PROCESS ParentProcess OPTIONAL
,
109 IN PCSR_PROCESS CsrProcess
);
113 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess
);
117 CsrApiRequestThread(IN PVOID Parameter
);
121 CsrSbApiRequestThread(IN PVOID Parameter
);
125 CsrApiPortInitialize(VOID
);
129 ProtectHandle(IN HANDLE ObjectHandle
);
133 UnProtectHandle(IN HANDLE ObjectHandle
);
137 CsrInsertThread(IN PCSR_PROCESS Process
,
138 IN PCSR_THREAD Thread
);
142 CsrDeallocateThread(IN PCSR_THREAD CsrThread
);
146 CsrLockedReferenceProcess(IN PCSR_PROCESS CsrProcess
);
150 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread
);
154 CsrInitializeProcessStructure(VOID
);
158 CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL
,
162 CsrLocateThreadByClientId(OUT PCSR_PROCESS
*Process OPTIONAL
,
163 IN PCLIENT_ID ClientId
);
167 CsrInitializeNtSessionList(VOID
);
171 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL
,
172 OUT PCSR_API_CONNECTINFO ConnectInfo
);
176 CsrSrvCreateSharedSection(IN PCHAR ParameterValue
);
180 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess
);
184 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread
);
188 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock
,
189 IN PLIST_ENTRY WaitList
,
190 IN PVOID WaitArgument1
,
191 IN PVOID WaitArgument2
,
193 IN BOOLEAN DereferenceThread
);
197 CsrReferenceNtSession(IN PCSR_NT_SESSION Session
);
201 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session
,
202 IN NTSTATUS ExitStatus
);
204 /******************************************************************************
205 ******************************************************************************/
209 CsrCreateSessionObjectDirectory(IN ULONG SessionId
);
213 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory
);
217 CsrSbApiPortInitialize(VOID
);
221 CsrSbCreateSession(IN PSB_API_MSG ApiMessage
);
225 CsrSbTerminateSession(IN PSB_API_MSG ApiMessage
);
229 CsrSbForeignSessionComplete(IN PSB_API_MSG ApiMessage
);
233 CsrSbCreateProcess(IN PSB_API_MSG ApiMessage
);
237 CsrSbApiHandleConnectionRequest(IN PSB_API_MSG Message
);
241 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage
);
243 /** this API is used with CsrPopulateDosDevices, deprecated in r55585.
246 CsrPopulateDosDevicesDirectory(IN HANDLE DosDevicesDirectory,
247 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap);
252 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR
*LocalSystemSd
);
256 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory
);