Synchronize with trunk's revision r57652.
[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 <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)
22 #else
23 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
24 #endif
25 #define NTOS_MODE_USER
26 #include <ndk/ntndk.h>
27
28 //
29 // SM Protocol Header
30 //
31 #include "sm/smmsg.h"
32
33 /* DEFINES ********************************************************************/
34
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
43
44 /* STRUCTURES *****************************************************************/
45
46 typedef struct _SMP_REGISTRY_VALUE
47 {
48 LIST_ENTRY Entry;
49 UNICODE_STRING Name;
50 UNICODE_STRING Value;
51 PCHAR AnsiValue;
52 } SMP_REGISTRY_VALUE, *PSMP_REGISTRY_VALUE;
53
54 typedef struct _SMP_SUBSYSTEM
55 {
56 LIST_ENTRY Entry;
57 HANDLE Event;
58 HANDLE ProcessHandle;
59 ULONG ImageType;
60 HANDLE PortHandle;
61 HANDLE SbApiPort;
62 CLIENT_ID ClientId;
63 ULONG MuSessionId;
64 BOOLEAN Terminating;
65 ULONG ReferenceCount;
66 } SMP_SUBSYSTEM, *PSMP_SUBSYSTEM;
67
68 /* EXTERNALS ******************************************************************/
69
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;
82 extern PVOID SmpHeap;
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;
93
94 /* FUNCTIONS ******************************************************************/
95
96 NTSTATUS
97 NTAPI
98 SmpTerminate(
99 IN PULONG_PTR Parameters,
100 IN ULONG ParameterMask,
101 IN ULONG ParameterCount
102 );
103
104 NTSTATUS
105 NTAPI
106 SmpCreateSecurityDescriptors(
107 IN BOOLEAN InitialCall
108 );
109
110 NTSTATUS
111 NTAPI
112 SmpInit(
113 IN PUNICODE_STRING InitialCommand,
114 OUT PHANDLE ProcessHandle
115 );
116
117 NTSTATUS
118 NTAPI
119 SmpAcquirePrivilege(
120 IN ULONG Privilege,
121 OUT PVOID *PrivilegeStat
122 );
123
124 VOID
125 NTAPI
126 SmpReleasePrivilege(
127 IN PVOID State
128 );
129
130 ULONG
131 NTAPI
132 SmpApiLoop(
133 IN PVOID Parameter
134 );
135
136 NTSTATUS
137 NTAPI
138 SmpExecuteCommand(
139 IN PUNICODE_STRING CommandLine,
140 IN ULONG MuSessionId,
141 OUT PHANDLE ProcessId,
142 IN ULONG Flags
143 );
144
145 NTSTATUS
146 NTAPI
147 SmpLoadSubSystemsForMuSession(
148 IN PULONG MuSessionId,
149 OUT PHANDLE ProcessId,
150 IN PUNICODE_STRING InitialCommand
151 );
152
153 VOID
154 NTAPI
155 SmpPagingFileInitialize(
156 VOID
157 );
158
159 NTSTATUS
160 NTAPI
161 SmpCreatePagingFileDescriptor(
162 IN PUNICODE_STRING PageFileToken
163 );
164
165 NTSTATUS
166 NTAPI
167 SmpCreatePagingFiles(
168 VOID
169 );
170
171 NTSTATUS
172 NTAPI
173 SmpParseCommandLine(
174 IN PUNICODE_STRING CommandLine,
175 OUT PULONG Flags,
176 OUT PUNICODE_STRING FileName,
177 OUT PUNICODE_STRING Directory,
178 OUT PUNICODE_STRING Arguments
179 );
180
181 NTSTATUS
182 NTAPI
183 SmpLoadSubSystem(
184 IN PUNICODE_STRING FileName,
185 IN PUNICODE_STRING Directory,
186 IN PUNICODE_STRING CommandLine,
187 IN ULONG MuSessionId,
188 OUT PHANDLE ProcessId,
189 IN ULONG Flags
190 );
191
192 NTSTATUS
193 NTAPI
194 SmpSetProcessMuSessionId(
195 IN HANDLE ProcessHandle,
196 IN ULONG SessionId
197 );
198
199 BOOLEAN
200 NTAPI
201 SmpQueryRegistrySosOption(
202 VOID
203 );
204
205 BOOLEAN
206 NTAPI
207 SmpSaveAndClearBootStatusData(
208 OUT PBOOLEAN BootOkay,
209 OUT PBOOLEAN ShutdownOkay
210 );
211
212 VOID
213 NTAPI
214 SmpRestoreBootStatusData(
215 IN BOOLEAN BootOkay,
216 IN BOOLEAN ShutdownOkay
217 );
218
219 BOOLEAN
220 NTAPI
221 SmpCheckForCrashDump(
222 IN PUNICODE_STRING FileName
223 );
224
225 VOID
226 NTAPI
227 SmpTranslateSystemPartitionInformation(
228 VOID
229 );
230
231 PSMP_SUBSYSTEM
232 NTAPI
233 SmpLocateKnownSubSysByCid(
234 IN PCLIENT_ID ClientId
235 );
236
237 PSMP_SUBSYSTEM
238 NTAPI
239 SmpLocateKnownSubSysByType(
240 IN ULONG MuSessionId,
241 IN ULONG ImageType
242 );
243
244 NTSTATUS
245 NTAPI
246 SmpGetProcessMuSessionId(
247 IN HANDLE ProcessHandle,
248 OUT PULONG SessionId
249 );
250
251 VOID
252 NTAPI
253 SmpDereferenceSubsystem(
254 IN PSMP_SUBSYSTEM SubSystem
255 );
256
257 NTSTATUS
258 NTAPI
259 SmpSbCreateSession(
260 IN PVOID Reserved,
261 IN PSMP_SUBSYSTEM OtherSubsystem,
262 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation,
263 IN ULONG MuSessionId,
264 IN PCLIENT_ID DbgClientId
265 );
266
267 ULONG
268 NTAPI
269 SmpAllocateSessionId(
270 IN PSMP_SUBSYSTEM Subsystem,
271 IN PSMP_SUBSYSTEM OtherSubsystem
272 );
273
274 VOID
275 NTAPI
276 SmpDeleteSession(
277 IN ULONG SessionId
278 );
279
280 BOOLEAN
281 NTAPI
282 SmpCheckDuplicateMuSessionId(
283 IN ULONG MuSessionId
284 );
285
286 NTSTATUS
287 NTAPI
288 SmpExecuteImage(
289 IN PUNICODE_STRING FileName,
290 IN PUNICODE_STRING Directory,
291 IN PUNICODE_STRING CommandLine,
292 IN ULONG MuSessionId,
293 IN ULONG Flags,
294 IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
295 );
296
297 #endif