2 * PROJECT: ReactOS Windows-Compatible Session Manager
3 * LICENSE: BSD 2-Clause License
4 * FILE: base/system/smss/smss.h
5 * PURPOSE: Main SMSS Header
6 * PROGRAMMERS: Alex Ionescu
9 /* DEPENDENCIES ***************************************************************/
16 #define WIN32_NO_STATUS
23 #include <pseh/pseh2.h>
24 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
25 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
26 #ifdef ENABLE_RTL_NUMBER_OF_V2
27 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
29 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
31 #define NTOS_MODE_USER
32 #include <ndk/iofuncs.h>
33 #include <ndk/obfuncs.h>
34 #include <ndk/rtlfuncs.h>
35 #include <ndk/cmfuncs.h>
36 #include <ndk/exfuncs.h>
37 #include <ndk/mmfuncs.h>
38 #include <ndk/psfuncs.h>
39 #include <ndk/lpcfuncs.h>
40 #include <ndk/setypes.h>
41 #include <ndk/sefuncs.h>
42 #include <ndk/umfuncs.h>
43 #include <ndk/kefuncs.h>
50 /* DEFINES ********************************************************************/
52 #define SMP_DEBUG_FLAG 0x01
53 #define SMP_ASYNC_FLAG 0x02
54 #define SMP_AUTOCHK_FLAG 0x04
55 #define SMP_SUBSYSTEM_FLAG 0x08
56 #define SMP_INVALID_PATH 0x10
57 #define SMP_DEFERRED_FLAG 0x20
58 #define SMP_POSIX_FLAG 0x100
59 #define SMP_OS2_FLAG 0x200
61 /* STRUCTURES *****************************************************************/
63 typedef struct _SMP_REGISTRY_VALUE
69 } SMP_REGISTRY_VALUE
, *PSMP_REGISTRY_VALUE
;
71 typedef struct _SMP_SUBSYSTEM
83 } SMP_SUBSYSTEM
, *PSMP_SUBSYSTEM
;
85 /* EXTERNALS ******************************************************************/
87 extern RTL_CRITICAL_SECTION SmpKnownSubSysLock
;
88 extern LIST_ENTRY SmpKnownSubSysHead
;
89 extern RTL_CRITICAL_SECTION SmpSessionListLock
;
90 extern LIST_ENTRY SmpSessionListHead
;
91 extern ULONG SmpNextSessionId
;
92 extern ULONG SmpNextSessionIdScanMode
;
93 extern BOOLEAN SmpDbgSsLoaded
;
94 extern HANDLE SmpWindowsSubSysProcess
;
95 extern HANDLE SmpSessionsObjectDirectory
;
96 extern HANDLE SmpWindowsSubSysProcessId
;
97 extern BOOLEAN RegPosixSingleInstance
;
98 extern UNICODE_STRING SmpDebugKeyword
, SmpASyncKeyword
, SmpAutoChkKeyword
;
100 extern ULONG SmBaseTag
;
101 extern UNICODE_STRING SmpSystemRoot
;
102 extern PWCHAR SmpDefaultEnvironment
;
103 extern UNICODE_STRING SmpDefaultLibPath
;
104 extern LIST_ENTRY SmpSetupExecuteList
;
105 extern LIST_ENTRY SmpSubSystemsToLoad
;
106 extern LIST_ENTRY SmpExecuteList
;
107 extern LIST_ENTRY SmpSubSystemList
;
108 extern ULONG AttachedSessionId
;
109 extern BOOLEAN SmpDebug
;
111 /* FUNCTIONS ******************************************************************/
116 IN PULONG_PTR Parameters
,
117 IN ULONG ParameterMask
,
118 IN ULONG ParameterCount
123 SmpCreateSecurityDescriptors(
124 IN BOOLEAN InitialCall
130 IN PUNICODE_STRING InitialCommand
,
131 OUT PHANDLE ProcessHandle
138 OUT PVOID
*PrivilegeStat
156 IN PUNICODE_STRING CommandLine
,
157 IN ULONG MuSessionId
,
158 OUT PHANDLE ProcessId
,
164 SmpLoadSubSystemsForMuSession(
165 IN PULONG MuSessionId
,
166 OUT PHANDLE ProcessId
,
167 IN PUNICODE_STRING InitialCommand
172 SmpPagingFileInitialize(
178 SmpCreatePagingFileDescriptor(
179 IN PUNICODE_STRING PageFileToken
184 SmpCreatePagingFiles(
191 IN PUNICODE_STRING CommandLine
,
193 OUT PUNICODE_STRING FileName
,
194 OUT PUNICODE_STRING Directory
,
195 OUT PUNICODE_STRING Arguments
201 IN PUNICODE_STRING FileName
,
202 IN PUNICODE_STRING Directory
,
203 IN PUNICODE_STRING CommandLine
,
204 IN ULONG MuSessionId
,
205 OUT PHANDLE ProcessId
,
211 SmpSetProcessMuSessionId(
212 IN HANDLE ProcessHandle
,
218 SmpQueryRegistrySosOption(
224 SmpSaveAndClearBootStatusData(
225 OUT PBOOLEAN BootOkay
,
226 OUT PBOOLEAN ShutdownOkay
231 SmpRestoreBootStatusData(
233 IN BOOLEAN ShutdownOkay
238 SmpCheckForCrashDump(
239 IN PUNICODE_STRING FileName
244 SmpTranslateSystemPartitionInformation(
250 SmpLocateKnownSubSysByCid(
251 IN PCLIENT_ID ClientId
256 SmpLocateKnownSubSysByType(
257 IN ULONG MuSessionId
,
263 SmpGetProcessMuSessionId(
264 IN HANDLE ProcessHandle
,
270 SmpDereferenceSubsystem(
271 IN PSMP_SUBSYSTEM SubSystem
278 IN PSMP_SUBSYSTEM OtherSubsystem
,
279 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
,
280 IN ULONG MuSessionId
,
281 IN PCLIENT_ID DbgClientId
286 SmpAllocateSessionId(
287 IN PSMP_SUBSYSTEM Subsystem
,
288 IN PSMP_SUBSYSTEM OtherSubsystem
299 SmpCheckDuplicateMuSessionId(
306 IN PUNICODE_STRING FileName
,
307 IN PUNICODE_STRING Directory
,
308 IN PUNICODE_STRING CommandLine
,
309 IN ULONG MuSessionId
,
311 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation