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 #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
44 extern HANDLE hBootstrapOk
;
45 extern HANDLE CsrApiPort
;
46 extern HANDLE CsrSmApiPort
;
47 extern HANDLE CsrSbApiPort
;
48 extern LIST_ENTRY CsrThreadHashTable
[257];
49 extern PCSR_PROCESS CsrRootProcess
;
50 extern UNICODE_STRING CsrDirectoryName
;
51 extern ULONG CsrDebug
;
52 extern ULONG CsrTotalPerProcessDataLength
;
53 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo
;
54 extern HANDLE CsrHeap
;
55 extern PVOID CsrSrvSharedSectionHeap
;
56 extern PVOID
*CsrSrvSharedStaticServerData
;
57 extern HANDLE CsrInitializationEvent
;
58 extern PCSR_SERVER_DLL CsrLoadedServerDll
[CSR_SERVER_DLL_MAX
];
59 extern ULONG CsrMaxApiRequestThreads
;
61 /****************************************************/
62 extern UNICODE_STRING CsrSbApiPortName
;
63 extern UNICODE_STRING CsrApiPortName
;
64 extern RTL_CRITICAL_SECTION CsrProcessLock
;
65 extern RTL_CRITICAL_SECTION CsrWaitListsLock
;
66 extern HANDLE CsrObjectDirectory
;
67 /****************************************************/
71 CSR_API(CsrSrvClientConnect
);
72 CSR_API(CsrSrvUnusedFunction
);
73 CSR_API(CsrSrvIdentifyAlertableThread
);
74 CSR_API(CsrSrvSetPriorityClass
);
79 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll
);
84 CsrCaptureArguments(IN PCSR_THREAD CsrThread
,
85 IN PCSR_API_MESSAGE ApiMessage
);
89 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage
);
93 CsrLoadServerDll(IN PCHAR DllString
,
94 IN PCHAR EntryPoint OPTIONAL
,
100 CsrAllocateThread(IN PCSR_PROCESS CsrProcess
);
104 CsrAllocateProcess(VOID
);
108 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess
);
112 CsrInsertProcess(IN PCSR_PROCESS ParentProcess OPTIONAL
,
113 IN PCSR_PROCESS CsrProcess
);
117 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess
);
121 CsrApiRequestThread(IN PVOID Parameter
);
125 CsrSbApiRequestThread(IN PVOID Parameter
);
129 CsrApiPortInitialize(VOID
);
133 ProtectHandle(IN HANDLE ObjectHandle
);
137 UnProtectHandle(IN HANDLE ObjectHandle
);
141 CsrInsertThread(IN PCSR_PROCESS Process
,
142 IN PCSR_THREAD Thread
);
146 CsrLockedReferenceProcess(IN PCSR_PROCESS CsrProcess
);
150 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread
);
154 CsrInitializeProcessStructure(VOID
);
156 // NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc,
160 CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL
,
164 CsrLocateThreadByClientId(OUT PCSR_PROCESS
*Process OPTIONAL
,
165 IN PCLIENT_ID ClientId
);
169 CsrInitializeNtSessionList(VOID
);
173 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL
,
174 OUT PCSR_CONNECTION_INFO ConnectInfo
);
178 CsrSrvCreateSharedSection(IN PCHAR ParameterValue
);
182 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess
);
186 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread
);
190 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock
,
191 IN PLIST_ENTRY WaitList
,
192 IN PVOID WaitArgument1
,
193 IN PVOID WaitArgument2
,
195 IN BOOLEAN DereferenceThread
);
199 CsrReferenceNtSession(IN PCSR_NT_SESSION Session
);
203 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session
,
204 IN NTSTATUS ExitStatus
);
206 /******************************************************************************
207 ******************************************************************************/
211 CsrCreateSessionObjectDirectory(IN ULONG SessionId
);
215 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory
);
219 CsrSbApiPortInitialize(VOID
);
223 CsrSbCreateSession(IN PSB_API_MSG ApiMessage
);
227 CsrSbTerminateSession(IN PSB_API_MSG ApiMessage
);
231 CsrSbForeignSessionComplete(IN PSB_API_MSG ApiMessage
);
235 CsrSbCreateProcess(IN PSB_API_MSG ApiMessage
);
239 CsrSbApiHandleConnectionRequest(IN PSB_API_MSG Message
);
243 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage
);
245 /** this API is used with CsrPopulateDosDevices, deprecated in r55585.
248 CsrPopulateDosDevicesDirectory(IN HANDLE DosDevicesDirectory,
249 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap);
254 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR
*LocalSystemSd
);
258 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory
);