/*++ BUILD Version: 0001 // Increment this if a change has global effects Copyright (c) Microsoft Corporation. All rights reserved. Module Name: ntsm.h Abstract: This module describes the data types and procedure prototypes that make up the NT session manager. This includes API's exported by the Session manager and related subsystems. Author: Mark Lucovsky (markl) 21-Jun-1989 Revision History: --*/ #ifndef _NTSM_ #define _NTSM_ #if _MSC_VER > 1000 #pragma once #endif #include #ifdef __cplusplus extern "C" { #endif typedef PVOID PARGUMENTS; typedef PVOID PUSERPROFILE; // // Message formats used by the Session Manager SubSystem to communicate // with the Emulation SubSystems, via the Sb API calls exported by each // emulation subsystem. // typedef struct _SBCONNECTINFO { ULONG SubsystemImageType; WCHAR EmulationSubSystemPortName[120]; } SBCONNECTINFO, *PSBCONNECTINFO; typedef enum _SBAPINUMBER { SbCreateSessionApi, SbTerminateSessionApi, SbForeignSessionCompleteApi, SbCreateProcessApi, SbMaxApiNumber } SBAPINUMBER; typedef struct _SBCREATESESSION { ULONG SessionId; RTL_USER_PROCESS_INFORMATION ProcessInformation; PUSERPROFILE UserProfile; ULONG DebugSession; CLIENT_ID DebugUiClientId; } SBCREATESESSION, *PSBCREATESESSION; typedef struct _SBTERMINATESESSION { ULONG SessionId; NTSTATUS TerminationStatus; } SBTERMINATESESSION, *PSBTERMINATESESSION; typedef struct _SBFOREIGNSESSIONCOMPLETE { ULONG SessionId; NTSTATUS TerminationStatus; } SBFOREIGNSESSIONCOMPLETE, *PSBFOREIGNSESSIONCOMPLETE; typedef struct _SBCREATEPROCESSIN { IN PUNICODE_STRING ImageFileName; IN PUNICODE_STRING CurrentDirectory; IN PUNICODE_STRING CommandLine; IN PUNICODE_STRING DefaultLibPath; IN ULONG Flags; IN ULONG DefaultDebugFlags; } SBCREATEPROCESSIN, *PSBCREATEPROCESSIN; typedef struct _SBCREATEPROCESSOUT { OUT HANDLE Process; OUT HANDLE Thread; OUT ULONG SubSystemType; OUT CLIENT_ID ClientId; } SBCREATEPROCESSOUT, *PSBCREATEPROCESSOUT; typedef struct _SBCREATEPROCESS { union { SBCREATEPROCESSIN i; SBCREATEPROCESSOUT o; }; } SBCREATEPROCESS, *PSBCREATEPROCESS; typedef struct _SBAPIMSG { PORT_MESSAGE h; union { SBCONNECTINFO ConnectionRequest; struct { SBAPINUMBER ApiNumber; NTSTATUS ReturnedStatus; union { SBCREATESESSION CreateSession; SBTERMINATESESSION TerminateSession; SBFOREIGNSESSIONCOMPLETE ForeignSessionComplete; SBCREATEPROCESS CreateProcess; } u; }; }; } SBAPIMSG, *PSBAPIMSG; // // API's Exported by Sm // NTSTATUS NTAPI SmCreateForeignSession( IN HANDLE SmApiPort, OUT PULONG ForeignSessionId, IN ULONG SourceSessionId, IN PRTL_USER_PROCESS_INFORMATION ProcessInformation, IN PCLIENT_ID DebugUiClientId OPTIONAL ); NTSTATUS NTAPI SmSessionComplete( IN HANDLE SmApiPort, IN ULONG SessionId, IN NTSTATUS CompletionStatus ); NTSTATUS NTAPI SmTerminateForeignSession( IN HANDLE SmApiPort, IN ULONG ForeignSessionId, IN NTSTATUS TerminationStatus ); NTSTATUS NTAPI SmExecPgm( IN HANDLE SmApiPort, IN PRTL_USER_PROCESS_INFORMATION ProcessInformation, IN BOOLEAN DebugFlag ); NTSTATUS NTAPI SmLoadDeferedSubsystem( IN HANDLE SmApiPort, IN PUNICODE_STRING DeferedSubsystem ); NTSTATUS NTAPI SmConnectToSm( IN PUNICODE_STRING SbApiPortName OPTIONAL, IN HANDLE SbApiPort OPTIONAL, IN ULONG SbImageType OPTIONAL, OUT PHANDLE SmApiPort ); // // Emulation Subsystems must export the following APIs // NTSTATUS NTAPI SbCreateSession( IN PSBAPIMSG SbApiMsg ); NTSTATUS NTAPI SbTerminateSession( IN PSBAPIMSG SbApiMsg ); NTSTATUS NTAPI SbForeignSessionComplete( IN PSBAPIMSG SbApiMsg ); NTSTATUS NTAPI SmStartCsr( IN HANDLE SmApiPort, OUT PULONG pMuSessionId, IN PUNICODE_STRING InitialCommand, OUT PULONG_PTR pInitialCommandProcessId, OUT PULONG_PTR pWindowsSubSysProcessId ); NTSTATUS NTAPI SmStopCsr( IN HANDLE SmApiPort, IN ULONG LogonId ); // // Moved from sm\server\sminit.c so CSR can use it // #define SMP_DEBUG_FLAG 0x00000001 #define SMP_ASYNC_FLAG 0x00000002 #define SMP_AUTOCHK_FLAG 0x00000004 #define SMP_SUBSYSTEM_FLAG 0x00000008 #define SMP_IMAGE_NOT_FOUND 0x00000010 #define SMP_DONT_START 0x00000020 #define SMP_AUTOFMT_FLAG 0x00000040 #define SMP_POSIX_SI_FLAG 0x00000080 #define SMP_POSIX_FLAG 0x00000100 #define SMP_OS2_FLAG 0x00000200 #ifdef __cplusplus } #endif #endif // _NTSM_