windows-nt/Source/XPSP1/NT/public/sdk/inc/ntsm.h
2020-09-26 16:20:57 +08:00

233 lines
4.6 KiB
C

/*++ 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 <nt.h>
#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_