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 RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
22 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
23 #ifdef ENABLE_RTL_NUMBER_OF_V2
24 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
26 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
28 #define NTOS_MODE_USER
29 #include <ndk/iofuncs.h>
30 #include <ndk/obfuncs.h>
31 #include <ndk/rtlfuncs.h>
32 #include <ndk/cmfuncs.h>
33 #include <ndk/exfuncs.h>
34 #include <ndk/mmfuncs.h>
35 #include <ndk/psfuncs.h>
36 #include <ndk/lpcfuncs.h>
37 #include <ndk/setypes.h>
38 #include <ndk/umfuncs.h>
39 #include <ndk/kefuncs.h>
41 /* SM Protocol Header */
44 /* DEFINES ********************************************************************/
46 #define SMP_DEBUG_FLAG 0x01
47 #define SMP_ASYNC_FLAG 0x02
48 #define SMP_AUTOCHK_FLAG 0x04
49 #define SMP_SUBSYSTEM_FLAG 0x08
50 #define SMP_INVALID_PATH 0x10
51 #define SMP_DEFERRED_FLAG 0x20
52 #define SMP_POSIX_FLAG 0x100
53 #define SMP_OS2_FLAG 0x200
55 /* STRUCTURES *****************************************************************/
57 typedef struct _SMP_REGISTRY_VALUE
63 } SMP_REGISTRY_VALUE
, *PSMP_REGISTRY_VALUE
;
65 typedef struct _SMP_SUBSYSTEM
77 } SMP_SUBSYSTEM
, *PSMP_SUBSYSTEM
;
79 /* EXTERNALS ******************************************************************/
81 extern RTL_CRITICAL_SECTION SmpKnownSubSysLock
;
82 extern LIST_ENTRY SmpKnownSubSysHead
;
83 extern RTL_CRITICAL_SECTION SmpSessionListLock
;
84 extern LIST_ENTRY SmpSessionListHead
;
85 extern ULONG SmpNextSessionId
;
86 extern ULONG SmpNextSessionIdScanMode
;
87 extern BOOLEAN SmpDbgSsLoaded
;
88 extern HANDLE SmpWindowsSubSysProcess
;
89 extern HANDLE SmpSessionsObjectDirectory
;
90 extern HANDLE SmpWindowsSubSysProcessId
;
91 extern BOOLEAN RegPosixSingleInstance
;
92 extern UNICODE_STRING SmpDebugKeyword
, SmpASyncKeyword
, SmpAutoChkKeyword
;
94 extern ULONG SmBaseTag
;
95 extern UNICODE_STRING SmpSystemRoot
;
96 extern PWCHAR SmpDefaultEnvironment
;
97 extern UNICODE_STRING SmpDefaultLibPath
;
98 extern LIST_ENTRY SmpSetupExecuteList
;
99 extern LIST_ENTRY SmpSubSystemsToLoad
;
100 extern LIST_ENTRY SmpExecuteList
;
101 extern LIST_ENTRY SmpSubSystemList
;
102 extern ULONG AttachedSessionId
;
103 extern BOOLEAN SmpDebug
;
105 /* FUNCTIONS ******************************************************************/
110 IN PULONG_PTR Parameters
,
111 IN ULONG ParameterMask
,
112 IN ULONG ParameterCount
117 SmpCreateSecurityDescriptors(
118 IN BOOLEAN InitialCall
124 IN PUNICODE_STRING InitialCommand
,
125 OUT PHANDLE ProcessHandle
132 OUT PVOID
*PrivilegeStat
150 IN PUNICODE_STRING CommandLine
,
151 IN ULONG MuSessionId
,
152 OUT PHANDLE ProcessId
,
158 SmpLoadSubSystemsForMuSession(
159 IN PULONG MuSessionId
,
160 OUT PHANDLE ProcessId
,
161 IN PUNICODE_STRING InitialCommand
166 SmpPagingFileInitialize(
172 SmpCreatePagingFileDescriptor(
173 IN PUNICODE_STRING PageFileToken
178 SmpCreatePagingFiles(
185 IN PUNICODE_STRING CommandLine
,
187 OUT PUNICODE_STRING FileName
,
188 OUT PUNICODE_STRING Directory
,
189 OUT PUNICODE_STRING Arguments
195 IN PUNICODE_STRING FileName
,
196 IN PUNICODE_STRING Directory
,
197 IN PUNICODE_STRING CommandLine
,
198 IN ULONG MuSessionId
,
199 OUT PHANDLE ProcessId
,
205 SmpSetProcessMuSessionId(
206 IN HANDLE ProcessHandle
,
212 SmpQueryRegistrySosOption(
218 SmpSaveAndClearBootStatusData(
219 OUT PBOOLEAN BootOkay
,
220 OUT PBOOLEAN ShutdownOkay
225 SmpRestoreBootStatusData(
227 IN BOOLEAN ShutdownOkay
232 SmpCheckForCrashDump(
233 IN PUNICODE_STRING FileName
238 SmpTranslateSystemPartitionInformation(
244 SmpLocateKnownSubSysByCid(
245 IN PCLIENT_ID ClientId
250 SmpLocateKnownSubSysByType(
251 IN ULONG MuSessionId
,
257 SmpGetProcessMuSessionId(
258 IN HANDLE ProcessHandle
,
264 SmpDereferenceSubsystem(
265 IN PSMP_SUBSYSTEM SubSystem
272 IN PSMP_SUBSYSTEM OtherSubsystem
,
273 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
,
274 IN ULONG MuSessionId
,
275 IN PCLIENT_ID DbgClientId
280 SmpAllocateSessionId(
281 IN PSMP_SUBSYSTEM Subsystem
,
282 IN PSMP_SUBSYSTEM OtherSubsystem
293 SmpCheckDuplicateMuSessionId(
300 IN PUNICODE_STRING FileName
,
301 IN PUNICODE_STRING Directory
,
302 IN PUNICODE_STRING CommandLine
,
303 IN ULONG MuSessionId
,
305 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation