Sync to trunk revision 63857.
[reactos.git] / base / system / smss / smss.h
1 /*
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
7 */
8
9 /* DEPENDENCIES ***************************************************************/
10 #ifndef _SM_
11 #define _SM_
12
13 #include <stdio.h>
14
15 /* Native Headers */
16 #define WIN32_NO_STATUS
17 #include <windef.h>
18 #include <winbase.h>
19 #include <winreg.h>
20
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)
25 #else
26 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
27 #endif
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>
40
41 /* SM Protocol Header */
42 #include <sm/smmsg.h>
43
44 /* DEFINES ********************************************************************/
45
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
54
55 /* STRUCTURES *****************************************************************/
56
57 typedef struct _SMP_REGISTRY_VALUE
58 {
59 LIST_ENTRY Entry;
60 UNICODE_STRING Name;
61 UNICODE_STRING Value;
62 PCHAR AnsiValue;
63 } SMP_REGISTRY_VALUE, *PSMP_REGISTRY_VALUE;
64
65 typedef struct _SMP_SUBSYSTEM
66 {
67 LIST_ENTRY Entry;
68 HANDLE Event;
69 HANDLE ProcessHandle;
70 ULONG ImageType;
71 HANDLE PortHandle;
72 HANDLE SbApiPort;
73 CLIENT_ID ClientId;
74 ULONG MuSessionId;
75 BOOLEAN Terminating;
76 ULONG ReferenceCount;
77 } SMP_SUBSYSTEM, *PSMP_SUBSYSTEM;
78
79 /* EXTERNALS ******************************************************************/
80
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;
93 extern PVOID SmpHeap;
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;
104
105 /* FUNCTIONS ******************************************************************/
106
107 NTSTATUS
108 NTAPI
109 SmpTerminate(
110 IN PULONG_PTR Parameters,
111 IN ULONG ParameterMask,
112 IN ULONG ParameterCount
113 );
114
115 NTSTATUS
116 NTAPI
117 SmpCreateSecurityDescriptors(
118 IN BOOLEAN InitialCall
119 );
120
121 NTSTATUS
122 NTAPI
123 SmpInit(
124 IN PUNICODE_STRING InitialCommand,
125 OUT PHANDLE ProcessHandle
126 );
127
128 NTSTATUS
129 NTAPI
130 SmpAcquirePrivilege(
131 IN ULONG Privilege,
132 OUT PVOID *PrivilegeStat
133 );
134
135 VOID
136 NTAPI
137 SmpReleasePrivilege(
138 IN PVOID State
139 );
140
141 ULONG
142 NTAPI
143 SmpApiLoop(
144 IN PVOID Parameter
145 );
146
147 NTSTATUS
148 NTAPI
149 SmpExecuteCommand(
150 IN PUNICODE_STRING CommandLine,
151 IN ULONG MuSessionId,
152 OUT PHANDLE ProcessId,
153 IN ULONG Flags
154 );
155
156 NTSTATUS
157 NTAPI
158 SmpLoadSubSystemsForMuSession(
159 IN PULONG MuSessionId,
160 OUT PHANDLE ProcessId,
161 IN PUNICODE_STRING InitialCommand
162 );
163
164 VOID
165 NTAPI
166 SmpPagingFileInitialize(
167 VOID
168 );
169
170 NTSTATUS
171 NTAPI
172 SmpCreatePagingFileDescriptor(
173 IN PUNICODE_STRING PageFileToken
174 );
175
176 NTSTATUS
177 NTAPI
178 SmpCreatePagingFiles(
179 VOID
180 );
181
182 NTSTATUS
183 NTAPI
184 SmpParseCommandLine(
185 IN PUNICODE_STRING CommandLine,
186 OUT PULONG Flags,
187 OUT PUNICODE_STRING FileName,
188 OUT PUNICODE_STRING Directory,
189 OUT PUNICODE_STRING Arguments
190 );
191
192 NTSTATUS
193 NTAPI
194 SmpLoadSubSystem(
195 IN PUNICODE_STRING FileName,
196 IN PUNICODE_STRING Directory,
197 IN PUNICODE_STRING CommandLine,
198 IN ULONG MuSessionId,
199 OUT PHANDLE ProcessId,
200 IN ULONG Flags
201 );
202
203 NTSTATUS
204 NTAPI
205 SmpSetProcessMuSessionId(
206 IN HANDLE ProcessHandle,
207 IN ULONG SessionId
208 );
209
210 BOOLEAN
211 NTAPI
212 SmpQueryRegistrySosOption(
213 VOID
214 );
215
216 BOOLEAN
217 NTAPI
218 SmpSaveAndClearBootStatusData(
219 OUT PBOOLEAN BootOkay,
220 OUT PBOOLEAN ShutdownOkay
221 );
222
223 VOID
224 NTAPI
225 SmpRestoreBootStatusData(
226 IN BOOLEAN BootOkay,
227 IN BOOLEAN ShutdownOkay
228 );
229
230 BOOLEAN
231 NTAPI
232 SmpCheckForCrashDump(
233 IN PUNICODE_STRING FileName
234 );
235
236 VOID
237 NTAPI
238 SmpTranslateSystemPartitionInformation(
239 VOID
240 );
241
242 PSMP_SUBSYSTEM
243 NTAPI
244 SmpLocateKnownSubSysByCid(
245 IN PCLIENT_ID ClientId
246 );
247
248 PSMP_SUBSYSTEM
249 NTAPI
250 SmpLocateKnownSubSysByType(
251 IN ULONG MuSessionId,
252 IN ULONG ImageType
253 );
254
255 NTSTATUS
256 NTAPI
257 SmpGetProcessMuSessionId(
258 IN HANDLE ProcessHandle,
259 OUT PULONG SessionId
260 );
261
262 VOID
263 NTAPI
264 SmpDereferenceSubsystem(
265 IN PSMP_SUBSYSTEM SubSystem
266 );
267
268 NTSTATUS
269 NTAPI
270 SmpSbCreateSession(
271 IN PVOID Reserved,
272 IN PSMP_SUBSYSTEM OtherSubsystem,
273 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation,
274 IN ULONG MuSessionId,
275 IN PCLIENT_ID DbgClientId
276 );
277
278 ULONG
279 NTAPI
280 SmpAllocateSessionId(
281 IN PSMP_SUBSYSTEM Subsystem,
282 IN PSMP_SUBSYSTEM OtherSubsystem
283 );
284
285 VOID
286 NTAPI
287 SmpDeleteSession(
288 IN ULONG SessionId
289 );
290
291 BOOLEAN
292 NTAPI
293 SmpCheckDuplicateMuSessionId(
294 IN ULONG MuSessionId
295 );
296
297 NTSTATUS
298 NTAPI
299 SmpExecuteImage(
300 IN PUNICODE_STRING FileName,
301 IN PUNICODE_STRING Directory,
302 IN PUNICODE_STRING CommandLine,
303 IN ULONG MuSessionId,
304 IN ULONG Flags,
305 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
306 );
307
308 #endif /* _SM_ */