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