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 #define NUMBER_THREAD_HASH_BUCKETS 257
49 extern LIST_ENTRY CsrThreadHashTable
[NUMBER_THREAD_HASH_BUCKETS
];
50 extern PCSR_PROCESS CsrRootProcess
;
51 extern UNICODE_STRING CsrDirectoryName
;
52 extern ULONG CsrDebug
;
53 extern ULONG CsrTotalPerProcessDataLength
;
54 extern SYSTEM_BASIC_INFORMATION CsrNtSysInfo
;
55 extern HANDLE CsrHeap
;
56 extern PVOID CsrSrvSharedSectionHeap
;
57 extern PVOID
*CsrSrvSharedStaticServerData
;
58 extern HANDLE CsrInitializationEvent
;
59 extern PCSR_SERVER_DLL CsrLoadedServerDll
[CSR_SERVER_DLL_MAX
];
60 extern ULONG CsrMaxApiRequestThreads
;
62 /****************************************************/
63 extern UNICODE_STRING CsrSbApiPortName
;
64 extern UNICODE_STRING CsrApiPortName
;
65 extern RTL_CRITICAL_SECTION CsrProcessLock
;
66 extern RTL_CRITICAL_SECTION CsrWaitListsLock
;
67 extern HANDLE CsrObjectDirectory
;
68 /****************************************************/
72 CSR_API(CsrSrvClientConnect
);
73 CSR_API(CsrSrvUnusedFunction
);
74 CSR_API(CsrSrvIdentifyAlertableThread
);
75 CSR_API(CsrSrvSetPriorityClass
);
80 CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll
);
85 CsrCaptureArguments(IN PCSR_THREAD CsrThread
,
86 IN PCSR_API_MESSAGE ApiMessage
);
90 CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage
);
94 CsrLoadServerDll(IN PCHAR DllString
,
95 IN PCHAR EntryPoint OPTIONAL
,
101 CsrAllocateThread(IN PCSR_PROCESS CsrProcess
);
105 CsrAllocateProcess(VOID
);
109 CsrDeallocateProcess(IN PCSR_PROCESS CsrProcess
);
113 CsrInsertProcess(IN PCSR_PROCESS ParentProcess OPTIONAL
,
114 IN PCSR_PROCESS CsrProcess
);
118 CsrRemoveProcess(IN PCSR_PROCESS CsrProcess
);
122 CsrApiRequestThread(IN PVOID Parameter
);
126 CsrSbApiRequestThread(IN PVOID Parameter
);
130 CsrApiPortInitialize(VOID
);
134 ProtectHandle(IN HANDLE ObjectHandle
);
138 UnProtectHandle(IN HANDLE ObjectHandle
);
142 CsrInsertThread(IN PCSR_PROCESS Process
,
143 IN PCSR_THREAD Thread
);
147 CsrLockedReferenceProcess(IN PCSR_PROCESS CsrProcess
);
151 CsrLockedReferenceThread(IN PCSR_THREAD CsrThread
);
155 CsrInitializeProcessStructure(VOID
);
157 // NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc,
161 CsrLocateThreadInProcess(IN PCSR_PROCESS CsrProcess OPTIONAL
,
165 CsrLocateThreadByClientId(OUT PCSR_PROCESS
*Process OPTIONAL
,
166 IN PCLIENT_ID ClientId
);
170 CsrInitializeNtSessionList(VOID
);
174 CsrSrvAttachSharedSection(IN PCSR_PROCESS CsrProcess OPTIONAL
,
175 OUT PCSR_API_CONNECTINFO ConnectInfo
);
179 CsrSrvCreateSharedSection(IN PCHAR ParameterValue
);
183 CsrLockedDereferenceProcess(PCSR_PROCESS CsrProcess
);
187 CsrLockedDereferenceThread(IN PCSR_THREAD CsrThread
);
191 CsrNotifyWaitBlock(IN PCSR_WAIT_BLOCK WaitBlock
,
192 IN PLIST_ENTRY WaitList
,
193 IN PVOID WaitArgument1
,
194 IN PVOID WaitArgument2
,
196 IN BOOLEAN DereferenceThread
);
200 CsrReferenceNtSession(IN PCSR_NT_SESSION Session
);
204 CsrDereferenceNtSession(IN PCSR_NT_SESSION Session
,
205 IN NTSTATUS ExitStatus
);
207 /******************************************************************************
208 ******************************************************************************/
212 CsrCreateSessionObjectDirectory(IN ULONG SessionId
);
216 CsrCreateObjectDirectory(IN PCHAR ObjectDirectory
);
220 CsrSbApiPortInitialize(VOID
);
224 CsrSbCreateSession(IN PSB_API_MSG ApiMessage
);
228 CsrSbTerminateSession(IN PSB_API_MSG ApiMessage
);
232 CsrSbForeignSessionComplete(IN PSB_API_MSG ApiMessage
);
236 CsrSbCreateProcess(IN PSB_API_MSG ApiMessage
);
240 CsrSbApiHandleConnectionRequest(IN PSB_API_MSG Message
);
244 CsrApiHandleConnectionRequest(IN PCSR_API_MESSAGE ApiMessage
);
246 /** this API is used with CsrPopulateDosDevices, deprecated in r55585.
249 CsrPopulateDosDevicesDirectory(IN HANDLE DosDevicesDirectory,
250 IN PPROCESS_DEVICEMAP_INFORMATION DeviceMap);
255 CsrCreateLocalSystemSD(OUT PSECURITY_DESCRIPTOR
*LocalSystemSd
);
259 CsrSetDirectorySecurity(IN HANDLE ObjectDirectory
);