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
21 #define NTOS_MODE_USER
22 #include <ndk/iofuncs.h>
23 #include <ndk/obfuncs.h>
24 #include <ndk/rtlfuncs.h>
25 #include <ndk/cmfuncs.h>
26 #include <ndk/exfuncs.h>
27 #include <ndk/mmfuncs.h>
28 #include <ndk/psfuncs.h>
29 #include <ndk/lpcfuncs.h>
30 #include <ndk/setypes.h>
31 #include <ndk/umfuncs.h>
32 #include <ndk/kefuncs.h>
34 /* SM Protocol Header */
37 /* DEFINES ********************************************************************/
39 #define SMP_DEBUG_FLAG 0x01
40 #define SMP_ASYNC_FLAG 0x02
41 #define SMP_AUTOCHK_FLAG 0x04
42 #define SMP_SUBSYSTEM_FLAG 0x08
43 #define SMP_INVALID_PATH 0x10
44 #define SMP_DEFERRED_FLAG 0x20
45 #define SMP_POSIX_FLAG 0x100
46 #define SMP_OS2_FLAG 0x200
48 /* STRUCTURES *****************************************************************/
50 typedef struct _SMP_REGISTRY_VALUE
56 } SMP_REGISTRY_VALUE
, *PSMP_REGISTRY_VALUE
;
58 typedef struct _SMP_SUBSYSTEM
70 } SMP_SUBSYSTEM
, *PSMP_SUBSYSTEM
;
72 /* EXTERNALS ******************************************************************/
74 extern RTL_CRITICAL_SECTION SmpKnownSubSysLock
;
75 extern LIST_ENTRY SmpKnownSubSysHead
;
76 extern RTL_CRITICAL_SECTION SmpSessionListLock
;
77 extern LIST_ENTRY SmpSessionListHead
;
78 extern ULONG SmpNextSessionId
;
79 extern ULONG SmpNextSessionIdScanMode
;
80 extern BOOLEAN SmpDbgSsLoaded
;
81 extern HANDLE SmpWindowsSubSysProcess
;
82 extern HANDLE SmpSessionsObjectDirectory
;
83 extern HANDLE SmpWindowsSubSysProcessId
;
84 extern BOOLEAN RegPosixSingleInstance
;
85 extern UNICODE_STRING SmpDebugKeyword
, SmpASyncKeyword
, SmpAutoChkKeyword
;
87 extern ULONG SmBaseTag
;
88 extern UNICODE_STRING SmpSystemRoot
;
89 extern PWCHAR SmpDefaultEnvironment
;
90 extern UNICODE_STRING SmpDefaultLibPath
;
91 extern LIST_ENTRY SmpSetupExecuteList
;
92 extern LIST_ENTRY SmpSubSystemsToLoad
;
93 extern LIST_ENTRY SmpExecuteList
;
94 extern LIST_ENTRY SmpSubSystemList
;
95 extern ULONG AttachedSessionId
;
96 extern BOOLEAN SmpDebug
;
98 /* FUNCTIONS ******************************************************************/
103 IN PULONG_PTR Parameters
,
104 IN ULONG ParameterMask
,
105 IN ULONG ParameterCount
110 SmpCreateSecurityDescriptors(
111 IN BOOLEAN InitialCall
117 IN PUNICODE_STRING InitialCommand
,
118 OUT PHANDLE ProcessHandle
125 OUT PVOID
*PrivilegeStat
143 IN PUNICODE_STRING CommandLine
,
144 IN ULONG MuSessionId
,
145 OUT PHANDLE ProcessId
,
151 SmpLoadSubSystemsForMuSession(
152 IN PULONG MuSessionId
,
153 OUT PHANDLE ProcessId
,
154 IN PUNICODE_STRING InitialCommand
159 SmpPagingFileInitialize(
165 SmpCreatePagingFileDescriptor(
166 IN PUNICODE_STRING PageFileToken
171 SmpCreatePagingFiles(
178 IN PUNICODE_STRING CommandLine
,
180 OUT PUNICODE_STRING FileName
,
181 OUT PUNICODE_STRING Directory
,
182 OUT PUNICODE_STRING Arguments
188 IN PUNICODE_STRING FileName
,
189 IN PUNICODE_STRING Directory
,
190 IN PUNICODE_STRING CommandLine
,
191 IN ULONG MuSessionId
,
192 OUT PHANDLE ProcessId
,
198 SmpSetProcessMuSessionId(
199 IN HANDLE ProcessHandle
,
205 SmpQueryRegistrySosOption(
211 SmpSaveAndClearBootStatusData(
212 OUT PBOOLEAN BootOkay
,
213 OUT PBOOLEAN ShutdownOkay
218 SmpRestoreBootStatusData(
220 IN BOOLEAN ShutdownOkay
225 SmpCheckForCrashDump(
226 IN PUNICODE_STRING FileName
231 SmpTranslateSystemPartitionInformation(
237 SmpLocateKnownSubSysByCid(
238 IN PCLIENT_ID ClientId
243 SmpLocateKnownSubSysByType(
244 IN ULONG MuSessionId
,
250 SmpGetProcessMuSessionId(
251 IN HANDLE ProcessHandle
,
257 SmpDereferenceSubsystem(
258 IN PSMP_SUBSYSTEM SubSystem
265 IN PSMP_SUBSYSTEM OtherSubsystem
,
266 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
,
267 IN ULONG MuSessionId
,
268 IN PCLIENT_ID DbgClientId
273 SmpAllocateSessionId(
274 IN PSMP_SUBSYSTEM Subsystem
,
275 IN PSMP_SUBSYSTEM OtherSubsystem
286 SmpCheckDuplicateMuSessionId(
293 IN PUNICODE_STRING FileName
,
294 IN PUNICODE_STRING Directory
,
295 IN PUNICODE_STRING CommandLine
,
296 IN ULONG MuSessionId
,
298 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation