[MSIEXEC] Sync with Wine Staging 2.16. CORE-13762
[reactos.git] / base / system / smss / smss.h
index f0fff9b..831aeea 100644 (file)
-#ifndef _SMSS_H_INCLUDED_
-#define _SMSS_H_INCLUDED_
+/*
+ * PROJECT:         ReactOS Windows-Compatible Session Manager
+ * LICENSE:         BSD 2-Clause License
+ * FILE:            base/system/smss/smss.h
+ * PURPOSE:         Main SMSS Header
+ * PROGRAMMERS:     Alex Ionescu
+ */
+
+/* DEPENDENCIES ***************************************************************/
+#ifndef _SM_
+#define _SM_
 
 #include <stdio.h>
-#include <stdlib.h>
+
+/* Native Headers */
 #define WIN32_NO_STATUS
-#include <windows.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winreg.h>
+
 #define NTOS_MODE_USER
+#include <ndk/iofuncs.h>
+#include <ndk/obfuncs.h>
+#include <ndk/rtlfuncs.h>
 #include <ndk/cmfuncs.h>
 #include <ndk/exfuncs.h>
-#include <ndk/iofuncs.h>
-#include <ndk/lpcfuncs.h>
-#include <ndk/mmtypes.h>
 #include <ndk/mmfuncs.h>
-#include <ndk/obfuncs.h>
 #include <ndk/psfuncs.h>
-#include <ndk/rtlfuncs.h>
+#include <ndk/lpcfuncs.h>
+#include <ndk/setypes.h>
 #include <ndk/umfuncs.h>
+#include <ndk/kefuncs.h>
+
+/* SM Protocol Header */
+#include <sm/smmsg.h>
 
-#include <sm/api.h>
-#include <sm/helper.h>
+/* DEFINES ********************************************************************/
 
-/* smss.c */
-extern ULONG SmSsProcessId;
+#define SMP_DEBUG_FLAG      0x01
+#define SMP_ASYNC_FLAG      0x02
+#define SMP_AUTOCHK_FLAG    0x04
+#define SMP_SUBSYSTEM_FLAG  0x08
+#define SMP_INVALID_PATH    0x10
+#define SMP_DEFERRED_FLAG   0x20
+#define SMP_POSIX_FLAG      0x100
+#define SMP_OS2_FLAG        0x200
 
-/* init.c */
-NTSTATUS InitSessionManager(VOID);
+/* STRUCTURES *****************************************************************/
 
-/* initheap.c */
-extern HANDLE SmpHeap;
-NTSTATUS SmCreateHeap(VOID);
+typedef struct _SMP_REGISTRY_VALUE
+{
+    LIST_ENTRY Entry;
+    UNICODE_STRING Name;
+    UNICODE_STRING Value;
+    PCHAR AnsiValue;
+} SMP_REGISTRY_VALUE, *PSMP_REGISTRY_VALUE;
+
+typedef struct _SMP_SUBSYSTEM
+{
+    LIST_ENTRY Entry;
+    HANDLE Event;
+    HANDLE ProcessHandle;
+    ULONG ImageType;
+    HANDLE PortHandle;
+    HANDLE SbApiPort;
+    CLIENT_ID ClientId;
+    ULONG MuSessionId;
+    BOOLEAN Terminating;
+    ULONG ReferenceCount;
+} SMP_SUBSYSTEM, *PSMP_SUBSYSTEM;
 
-/* initenv.c */
-extern PWSTR SmSystemEnvironment;
-NTSTATUS SmCreateEnvironment(VOID);
-NTSTATUS SmSetEnvironmentVariables(VOID);
-NTSTATUS SmUpdateEnvironment(VOID);
+/* EXTERNALS ******************************************************************/
 
-/* initobdir.c */
-NTSTATUS SmCreateObjectDirectories(VOID);
+extern RTL_CRITICAL_SECTION SmpKnownSubSysLock;
+extern LIST_ENTRY SmpKnownSubSysHead;
+extern RTL_CRITICAL_SECTION SmpSessionListLock;
+extern LIST_ENTRY SmpSessionListHead;
+extern ULONG SmpNextSessionId;
+extern ULONG SmpNextSessionIdScanMode;
+extern BOOLEAN SmpDbgSsLoaded;
+extern HANDLE SmpWindowsSubSysProcess;
+extern HANDLE SmpSessionsObjectDirectory;
+extern HANDLE SmpWindowsSubSysProcessId;
+extern BOOLEAN RegPosixSingleInstance;
+extern UNICODE_STRING SmpDebugKeyword, SmpASyncKeyword, SmpAutoChkKeyword;
+extern PVOID SmpHeap;
+extern ULONG SmBaseTag;
+extern UNICODE_STRING SmpSystemRoot;
+extern PWCHAR SmpDefaultEnvironment;
+extern UNICODE_STRING SmpDefaultLibPath;
+extern LIST_ENTRY SmpSetupExecuteList;
+extern LIST_ENTRY SmpSubSystemsToLoad;
+extern LIST_ENTRY SmpExecuteList;
+extern LIST_ENTRY SmpSubSystemList;
+extern ULONG AttachedSessionId;
+extern BOOLEAN SmpDebug;
 
-/* initdosdev.c */
-NTSTATUS SmInitDosDevices(VOID);
+/* FUNCTIONS ******************************************************************/
 
-/* initrun.c */
-extern HANDLE Children[2];
-NTSTATUS SmRunBootApplications(VOID);
+NTSTATUS
+NTAPI
+SmpTerminate(
+    IN PULONG_PTR Parameters,
+    IN ULONG ParameterMask,
+    IN ULONG ParameterCount
+);
 
-/* initmv.c */
-NTSTATUS SmProcessFileRenameList(VOID);
+NTSTATUS
+NTAPI
+SmpCreateSecurityDescriptors(
+    IN BOOLEAN InitialCall
+);
 
-/* initwkdll.c */
-NTSTATUS SmLoadKnownDlls(VOID);
+NTSTATUS
+NTAPI
+SmpInit(
+    IN PUNICODE_STRING InitialCommand,
+    OUT PHANDLE ProcessHandle
+);
 
-/* initpage.c */
-NTSTATUS SmCreatePagingFiles(VOID);
+NTSTATUS
+NTAPI
+SmpAcquirePrivilege(
+    IN ULONG Privilege,
+    OUT PVOID *PrivilegeStat
+);
 
-/* initreg.c */
-NTSTATUS SmInitializeRegistry(VOID);
+VOID
+NTAPI
+SmpReleasePrivilege(
+    IN PVOID State
+);
 
-/* initss.c */
-NTSTATUS NTAPI SmRegisterInternalSubsystem(LPWSTR,USHORT,PHANDLE);
-NTSTATUS SmLoadSubsystems(VOID);
+ULONG
+NTAPI
+SmpApiLoop(
+    IN PVOID Parameter
+);
 
-/* smapi.c */
-#define SMAPI(n) \
-NTSTATUS FASTCALL n (PSM_PORT_MESSAGE Request)
-PSM_CONNECT_DATA FASTCALL SmpGetConnectData (PSM_PORT_MESSAGE);
-NTSTATUS SmCreateApiPort(VOID);
-VOID NTAPI SmpApiThread(PVOID);
+NTSTATUS
+NTAPI
+SmpExecuteCommand(
+    IN PUNICODE_STRING CommandLine,
+    IN ULONG MuSessionId,
+    OUT PHANDLE ProcessId,
+    IN ULONG Flags
+);
 
+NTSTATUS
+NTAPI
+SmpLoadSubSystemsForMuSession(
+    IN PULONG MuSessionId,
+    OUT PHANDLE ProcessId,
+    IN PUNICODE_STRING InitialCommand
+);
 
-/* smapiexec.c */
-#define SM_CREATE_FLAG_WAIT        0x01
-#define SM_CREATE_FLAG_RESERVE_1MB 0x02
-NTSTATUS NTAPI SmCreateUserProcess(LPWSTR ImagePath,
-                                    LPWSTR CommandLine,
-                                    ULONG Flags,
-                                    PLARGE_INTEGER Timeout OPTIONAL,
-                                    PRTL_USER_PROCESS_INFORMATION UserProcessInfo OPTIONAL);
-NTSTATUS FASTCALL SmExecPgm(PSM_PORT_MESSAGE);
+VOID
+NTAPI
+SmpPagingFileInitialize(
+    VOID
+);
 
-/* smapicomp.c */
-NTSTATUS FASTCALL SmCompSes(PSM_PORT_MESSAGE);
+NTSTATUS
+NTAPI
+SmpCreatePagingFileDescriptor(
+    IN PUNICODE_STRING PageFileToken
+);
 
-/* smapiquery.c */
-NTSTATUS FASTCALL SmQryInfo(PSM_PORT_MESSAGE);
+NTSTATUS
+NTAPI
+SmpCreatePagingFiles(
+    VOID
+);
 
-/* client.c */
-#define SM_CLIENT_FLAG_CANDIDATE   0x8000
-#define SM_CLIENT_FLAG_INITIALIZED 0x0001
-#define SM_CLIENT_FLAG_REQUIRED    0x0002
-typedef struct _SM_CLIENT_DATA
-{
-  RTL_CRITICAL_SECTION  Lock;
-  WCHAR                 ProgramName [SM_SB_NAME_MAX_LENGTH];
-  USHORT                SubsystemId;
-  WORD                  Flags;
-  WORD                  Unused;
-  ULONG                 ServerProcessId;
-  HANDLE               ServerProcess;
-  HANDLE               ApiPort;
-  HANDLE               ApiPortThread;
-  HANDLE               SbApiPort;
-  WCHAR                        SbApiPortName [SM_SB_NAME_MAX_LENGTH];
-
-} SM_CLIENT_DATA, *PSM_CLIENT_DATA;
-NTSTATUS SmInitializeClientManagement (VOID);
-NTSTATUS NTAPI SmCreateClient (PRTL_USER_PROCESS_INFORMATION,PWSTR);
-NTSTATUS NTAPI SmDestroyClient (ULONG);
-NTSTATUS NTAPI SmBeginClientInitialization (PSM_PORT_MESSAGE,PSM_CLIENT_DATA*);
-NTSTATUS NTAPI SmCompleteClientInitialization (ULONG);
-NTSTATUS FASTCALL SmGetClientBasicInformation (PSM_BASIC_INFORMATION);
-NTSTATUS FASTCALL SmGetSubSystemInformation (PSM_SUBSYSTEM_INFORMATION);
-
-/* debug.c */
-extern HANDLE DbgSsApiPort;
-extern HANDLE DbgUiApiPort;
-NTSTATUS SmInitializeDbgSs(VOID);
-
-/* print.c */
-VOID NTAPI DisplayString(LPCWSTR lpwString);
-VOID NTAPI PrintString (char* fmt, ...);
-
-#endif /* _SMSS_H_INCLUDED_ */
-
-/* EOF */
+NTSTATUS
+NTAPI
+SmpParseCommandLine(
+    IN PUNICODE_STRING CommandLine,
+    OUT PULONG Flags,
+    OUT PUNICODE_STRING FileName,
+    OUT PUNICODE_STRING Directory,
+    OUT PUNICODE_STRING Arguments
+);
+
+NTSTATUS
+NTAPI
+SmpLoadSubSystem(
+    IN PUNICODE_STRING FileName,
+    IN PUNICODE_STRING Directory,
+    IN PUNICODE_STRING CommandLine,
+    IN ULONG MuSessionId,
+    OUT PHANDLE ProcessId,
+    IN ULONG Flags
+);
+
+NTSTATUS
+NTAPI
+SmpSetProcessMuSessionId(
+    IN HANDLE ProcessHandle,
+    IN ULONG SessionId
+);
+
+BOOLEAN
+NTAPI
+SmpQueryRegistrySosOption(
+    VOID
+);
+
+BOOLEAN
+NTAPI
+SmpSaveAndClearBootStatusData(
+    OUT PBOOLEAN BootOkay,
+    OUT PBOOLEAN ShutdownOkay
+);
+
+VOID
+NTAPI
+SmpRestoreBootStatusData(
+    IN BOOLEAN BootOkay,
+    IN BOOLEAN ShutdownOkay
+);
+
+BOOLEAN
+NTAPI
+SmpCheckForCrashDump(
+    IN PUNICODE_STRING FileName
+);
+
+VOID
+NTAPI
+SmpTranslateSystemPartitionInformation(
+    VOID
+);
+
+PSMP_SUBSYSTEM
+NTAPI
+SmpLocateKnownSubSysByCid(
+    IN PCLIENT_ID ClientId
+);
+
+PSMP_SUBSYSTEM
+NTAPI
+SmpLocateKnownSubSysByType(
+    IN ULONG MuSessionId,
+    IN ULONG ImageType
+);
+
+NTSTATUS
+NTAPI
+SmpGetProcessMuSessionId(
+    IN HANDLE ProcessHandle,
+    OUT PULONG SessionId
+);
+
+VOID
+NTAPI
+SmpDereferenceSubsystem(
+    IN PSMP_SUBSYSTEM SubSystem
+);
+
+NTSTATUS
+NTAPI
+SmpSbCreateSession(
+    IN PVOID Reserved,
+    IN PSMP_SUBSYSTEM OtherSubsystem,
+    IN PRTL_USER_PROCESS_INFORMATION ProcessInformation,
+    IN ULONG MuSessionId,
+    IN PCLIENT_ID DbgClientId
+);
+
+ULONG
+NTAPI
+SmpAllocateSessionId(
+    IN PSMP_SUBSYSTEM Subsystem,
+    IN PSMP_SUBSYSTEM OtherSubsystem
+);
+
+VOID
+NTAPI
+SmpDeleteSession(
+    IN ULONG SessionId
+);
+
+BOOLEAN
+NTAPI
+SmpCheckDuplicateMuSessionId(
+    IN ULONG MuSessionId
+);
+
+NTSTATUS
+NTAPI
+SmpExecuteImage(
+    IN PUNICODE_STRING FileName,
+    IN PUNICODE_STRING Directory,
+    IN PUNICODE_STRING CommandLine,
+    IN ULONG MuSessionId,
+    IN ULONG Flags,
+    IN PRTL_USER_PROCESS_INFORMATION ProcessInformation
+);
 
+#endif /* _SM_ */