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
17 #include <windows.h> // Should just be using ntdef.h I think
18 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
19 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
20 #ifdef ENABLE_RTL_NUMBER_OF_V2
21 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
23 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
25 #define NTOS_MODE_USER
26 #include <ndk/ntndk.h>
33 /* DEFINES ********************************************************************/
35 #define SMP_DEBUG_FLAG 0x01
36 #define SMP_ASYNC_FLAG 0x02
37 #define SMP_AUTOCHK_FLAG 0x04
38 #define SMP_SUBSYSTEM_FLAG 0x08
39 #define SMP_INVALID_PATH 0x10
40 #define SMP_DEFERRED_FLAG 0x20
41 #define SMP_POSIX_FLAG 0x100
42 #define SMP_OS2_FLAG 0x200
44 /* STRUCTURES *****************************************************************/
46 typedef struct _SMP_REGISTRY_VALUE
52 } SMP_REGISTRY_VALUE
, *PSMP_REGISTRY_VALUE
;
54 typedef struct _SMP_SUBSYSTEM
66 } SMP_SUBSYSTEM
, *PSMP_SUBSYSTEM
;
68 /* EXTERNALS ******************************************************************/
70 extern RTL_CRITICAL_SECTION SmpKnownSubSysLock
;
71 extern LIST_ENTRY SmpKnownSubSysHead
;
72 extern RTL_CRITICAL_SECTION SmpSessionListLock
;
73 extern LIST_ENTRY SmpSessionListHead
;
74 extern ULONG SmpNextSessionId
;
75 extern ULONG SmpNextSessionIdScanMode
;
76 extern BOOLEAN SmpDbgSsLoaded
;
77 extern HANDLE SmpWindowsSubSysProcess
;
78 extern HANDLE SmpSessionsObjectDirectory
;
79 extern HANDLE SmpWindowsSubSysProcessId
;
80 extern BOOLEAN RegPosixSingleInstance
;
81 extern UNICODE_STRING SmpDebugKeyword
, SmpASyncKeyword
, SmpAutoChkKeyword
;
83 extern ULONG SmBaseTag
;
84 extern UNICODE_STRING SmpSystemRoot
;
85 extern PWCHAR SmpDefaultEnvironment
;
86 extern UNICODE_STRING SmpDefaultLibPath
;
87 extern LIST_ENTRY SmpSetupExecuteList
;
88 extern LIST_ENTRY SmpSubSystemsToLoad
;
89 extern LIST_ENTRY SmpExecuteList
;
90 extern LIST_ENTRY SmpSubSystemList
;
91 extern ULONG AttachedSessionId
;
92 extern BOOLEAN SmpDebug
;
94 /* FUNCTIONS ******************************************************************/
99 IN PULONG_PTR Parameters
,
100 IN ULONG ParameterMask
,
101 IN ULONG ParameterCount
106 SmpCreateSecurityDescriptors(
107 IN BOOLEAN InitialCall
113 IN PUNICODE_STRING InitialCommand
,
114 OUT PHANDLE ProcessHandle
121 OUT PVOID
*PrivilegeStat
139 IN PUNICODE_STRING CommandLine
,
140 IN ULONG MuSessionId
,
141 OUT PHANDLE ProcessId
,
147 SmpLoadSubSystemsForMuSession(
148 IN PULONG MuSessionId
,
149 OUT PHANDLE ProcessId
,
150 IN PUNICODE_STRING InitialCommand
155 SmpPagingFileInitialize(
161 SmpCreatePagingFileDescriptor(
162 IN PUNICODE_STRING PageFileToken
167 SmpCreatePagingFiles(
174 IN PUNICODE_STRING CommandLine
,
176 OUT PUNICODE_STRING FileName
,
177 OUT PUNICODE_STRING Directory
,
178 OUT PUNICODE_STRING Arguments
184 IN PUNICODE_STRING FileName
,
185 IN PUNICODE_STRING Directory
,
186 IN PUNICODE_STRING CommandLine
,
187 IN ULONG MuSessionId
,
188 OUT PHANDLE ProcessId
,
194 SmpSetProcessMuSessionId(
195 IN HANDLE ProcessHandle
,
201 SmpQueryRegistrySosOption(
207 SmpSaveAndClearBootStatusData(
208 OUT PBOOLEAN BootOkay
,
209 OUT PBOOLEAN ShutdownOkay
214 SmpRestoreBootStatusData(
216 IN BOOLEAN ShutdownOkay
221 SmpCheckForCrashDump(
222 IN PUNICODE_STRING FileName
227 SmpTranslateSystemPartitionInformation(
233 SmpLocateKnownSubSysByCid(
234 IN PCLIENT_ID ClientId
239 SmpLocateKnownSubSysByType(
240 IN ULONG MuSessionId
,
246 SmpGetProcessMuSessionId(
247 IN HANDLE ProcessHandle
,
253 SmpDereferenceSubsystem(
254 IN PSMP_SUBSYSTEM SubSystem
261 IN PSMP_SUBSYSTEM OtherSubsystem
,
262 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
,
263 IN ULONG MuSessionId
,
264 IN PCLIENT_ID DbgClientId
269 SmpAllocateSessionId(
270 IN PSMP_SUBSYSTEM Subsystem
,
271 IN PSMP_SUBSYSTEM OtherSubsystem
282 SmpCheckDuplicateMuSessionId(
289 IN PUNICODE_STRING FileName
,
290 IN PUNICODE_STRING Directory
,
291 IN PUNICODE_STRING CommandLine
,
292 IN ULONG MuSessionId
,
294 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation