mirror of
https://github.com/reactos/reactos.git
synced 2024-07-02 02:34:53 +00:00
[SMSS]: Add a new header which precisely documents the SB and SM packet structure and protocol. These match the Server 2003 SP1 definitions and sizes and would allow a ReactOS SMSS to talk to a Windows CSRSS and vice-versa.
svn path=/trunk/; revision=55290
This commit is contained in:
parent
07155c928c
commit
bb0bb575b6
207
reactos/include/reactos/subsys/sm/smmsg.h
Normal file
207
reactos/include/reactos/subsys/sm/smmsg.h
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Windows-Compatible Session Manager
|
||||||
|
* LICENSE: BSD 2-Clause License
|
||||||
|
* FILE: include/reactos/subsystems/sm/smmsg.h
|
||||||
|
* PURPOSE: SMSS (SB and SM) Message Format
|
||||||
|
* PROGRAMMERS: Alex Ionescu
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// There are the APIs that a Client (such as CSRSS) can send to the SMSS Server.
|
||||||
|
//
|
||||||
|
// These are called "SM" APIs.
|
||||||
|
//
|
||||||
|
// The exact names are not known, but we are basing them on the SmpApiName array
|
||||||
|
// in the checked build of SMSS, which is probably a close approximation. We add
|
||||||
|
// "p" to use the similar nomenclature seen/leaked out in the Base CSRSS APIs.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
typedef enum _SMSRV_API_NUMBER
|
||||||
|
{
|
||||||
|
SmpCreateForeignSession,
|
||||||
|
SmpSessionComplete,
|
||||||
|
SmpTerminateForeignSession,
|
||||||
|
SmpExecPgm,
|
||||||
|
SmpLoadDeferedSubsystem,
|
||||||
|
SmpStartCsr,
|
||||||
|
SmpStopCsr,
|
||||||
|
SmpMaxApiNumber // Based on BasepMaxApiNumber, UserpMaxApiNumber...
|
||||||
|
} SMSRV_API_NUMBER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// These are the structures making up the SM_API_MSG packet structure defined
|
||||||
|
// below. Each one corresponds to an equivalent API from the list above.
|
||||||
|
//
|
||||||
|
typedef struct _SM_CREATE_FOREIGN_SESSION_MSG
|
||||||
|
{
|
||||||
|
ULONG NotImplemented;
|
||||||
|
} SM_CREATE_FOREIGN_SESSION_MSG, *PSM_CREATE_FOREIGN_SESSION_MSG;
|
||||||
|
|
||||||
|
typedef struct _SM_SESSION_COMPLETE_MSG
|
||||||
|
{
|
||||||
|
ULONG SessionId;
|
||||||
|
NTSTATUS Status;
|
||||||
|
} SM_SESSION_COMPLETE_MSG, *PSM_SESSION_COMPLETE_MSG;
|
||||||
|
|
||||||
|
typedef struct _SM_TERMINATE_FOREIGN_SESSION_MSG
|
||||||
|
{
|
||||||
|
ULONG NotImplemented;
|
||||||
|
} SM_TERMINATE_FOREIGN_SESSION_MSG, *PSM_TERMINATE_FOREIGN_SESSION_MSG;
|
||||||
|
|
||||||
|
typedef struct _SM_EXEC_PGM_MSG
|
||||||
|
{
|
||||||
|
RTL_USER_PROCESS_INFORMATION ProcessInformation;
|
||||||
|
BOOLEAN DebugFlag;
|
||||||
|
} SM_EXEC_PGM_MSG, *PM_EXEC_PGM_MSG;
|
||||||
|
|
||||||
|
typedef struct _SM_LOAD_DEFERED_SUBSYSTEM_MSG
|
||||||
|
{
|
||||||
|
ULONG Length;
|
||||||
|
WCHAR Buffer[32];
|
||||||
|
} SM_LOAD_DEFERED_SUBSYSTEM_MSG, *PSM_LOAD_DEFERED_SUBSYSTEM_MSG;
|
||||||
|
|
||||||
|
typedef struct _SM_START_CSR_MSG
|
||||||
|
{
|
||||||
|
ULONG MuSessionId;
|
||||||
|
ULONG Length;
|
||||||
|
WCHAR Buffer[128];
|
||||||
|
HANDLE WindowsSubSysProcessId;
|
||||||
|
HANDLE SmpInitialCommandProcessId;
|
||||||
|
} SM_START_CSR_MSG, *PSM_START_CSR_MSG;
|
||||||
|
|
||||||
|
typedef struct _SM_STOP_CSR_MSG
|
||||||
|
{
|
||||||
|
ULONG MuSessionId;
|
||||||
|
} SM_STOP_CSR_MSG, *PSM_STOP_CSR_MSG;
|
||||||
|
|
||||||
|
//
|
||||||
|
// This is the actual packet structure sent over LCP to the \SmApiPort
|
||||||
|
//
|
||||||
|
typedef struct _SM_API_MSG
|
||||||
|
{
|
||||||
|
PORT_MESSAGE h;
|
||||||
|
SMSRV_API_NUMBER ApiNumber;
|
||||||
|
NTSTATUS ReturnValue;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
SM_CREATE_FOREIGN_SESSION_MSG CreateForeignSession;
|
||||||
|
SM_SESSION_COMPLETE_MSG SessionComplete;
|
||||||
|
SM_TERMINATE_FOREIGN_SESSION_MSG TerminateForeignComplete;
|
||||||
|
SM_EXEC_PGM_MSG ExecPgm;
|
||||||
|
SM_LOAD_DEFERED_SUBSYSTEM_MSG LoadDefered;
|
||||||
|
SM_START_CSR_MSG StartCsr;
|
||||||
|
SM_STOP_CSR_MSG StopCsr;
|
||||||
|
} u;
|
||||||
|
} SM_API_MSG, *PSM_API_MSG;
|
||||||
|
|
||||||
|
//
|
||||||
|
// This is the size that Server 2003 SP1 SMSS expects, so make sure we conform.
|
||||||
|
//
|
||||||
|
C_ASSERT(sizeof(SM_API_MSG) == 0x130);
|
||||||
|
|
||||||
|
//
|
||||||
|
// There are the APIs that the SMSS Serve can send to a client (such as CSRSS)
|
||||||
|
//
|
||||||
|
// These are called "SB" APIs.
|
||||||
|
//
|
||||||
|
// The exact names are unknown but we are basing them on the CsrServerSbApiName
|
||||||
|
// array in the checked build of CSRSRV which is probably a close approximation.
|
||||||
|
// We add "p" to use the similar nomenclature seen/leaked out in the Base CSRSS
|
||||||
|
// APIs.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
typedef enum _SB_API_NUMBER
|
||||||
|
{
|
||||||
|
SbpCreateSession,
|
||||||
|
SbpTerminateSession,
|
||||||
|
SbpForeignSessionComplete,
|
||||||
|
SbpCreateProcess,
|
||||||
|
SbpMaxApiNumber // Based on BasepMaxApiNumber, UserpMaxApiNumber...
|
||||||
|
} SB_API_NUMBER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// These are the structures making up the SB_API_MSG packet structure defined
|
||||||
|
// below. Each one corresponds to an equivalent API from the list above.
|
||||||
|
//
|
||||||
|
typedef struct _SB_CREATE_SESSION_MSG
|
||||||
|
{
|
||||||
|
ULONG SessionId;
|
||||||
|
RTL_USER_PROCESS_INFORMATION ProcessInfo;
|
||||||
|
} SB_CREATE_SESSION_MSG, *PSB_CREATE_SESSION_MSG;
|
||||||
|
|
||||||
|
typedef struct _SB_TERMINATE_SESSION_MSG
|
||||||
|
{
|
||||||
|
ULONG SessionId;
|
||||||
|
} SB_TERMINATE_SESSION_MSG, *PSB_TERMINATE_SESSION_MSG;
|
||||||
|
|
||||||
|
typedef struct _SB_FOREIGN_SESSION_COMPLETE_MSG
|
||||||
|
{
|
||||||
|
ULONG SessionId;
|
||||||
|
} SB_FOREIGN_SESSION_COMPLETE_MSG, *PSB_FOREIGN_SESSION_COMPLETE_MSG;
|
||||||
|
|
||||||
|
#define SB_PROCESS_FLAGS_DEBUG 0x1
|
||||||
|
#define SB_PROCESS_FLAGS_WAIT_ON_THREAD 0x2
|
||||||
|
#define SB_PROCESS_FLAGS_RESERVE_1MB 0x8
|
||||||
|
#define SB_PROCESS_FLAGS_SKIP_CHECKS 0x20
|
||||||
|
typedef struct _SB_CREATE_PROCESS_MSG
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
PUNICODE_STRING ImageName;
|
||||||
|
PUNICODE_STRING CurrentDirectory;
|
||||||
|
PUNICODE_STRING CommandLine;
|
||||||
|
PUNICODE_STRING DllPath;
|
||||||
|
ULONG Flags;
|
||||||
|
ULONG DebugFlags;
|
||||||
|
} In;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
HANDLE ProcessHandle;
|
||||||
|
HANDLE ThreadHandle;
|
||||||
|
ULONG SubsystemType;
|
||||||
|
CLIENT_ID ClientId;
|
||||||
|
} Out;
|
||||||
|
};
|
||||||
|
} SB_CREATE_PROCESS_MSG, *PSB_CREATE_PROCESS_MSG;
|
||||||
|
|
||||||
|
//
|
||||||
|
// When the server connects to a client, this structure is exchanged
|
||||||
|
//
|
||||||
|
typedef struct _SB_CONNECTION_INFO
|
||||||
|
{
|
||||||
|
ULONG SubsystemType;
|
||||||
|
WCHAR SbApiPortName[120];
|
||||||
|
} SB_CONNECTION_INFO, *PSB_CONNECTION_INFO;
|
||||||
|
|
||||||
|
//
|
||||||
|
// This is the actual packet structure sent over LCP to the \SbApiPort
|
||||||
|
//
|
||||||
|
typedef struct _SB_API_MSG
|
||||||
|
{
|
||||||
|
PORT_MESSAGE Header;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
SB_CONNECTION_INFO ConnectionInfo;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
SB_API_NUMBER ApiNumber;
|
||||||
|
NTSTATUS ReturnValue;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
SB_CREATE_SESSION_MSG CreateSession;
|
||||||
|
SB_TERMINATE_SESSION_MSG TerminateSession;
|
||||||
|
SB_FOREIGN_SESSION_COMPLETE_MSG ForeignSessionComplete;
|
||||||
|
SB_CREATE_PROCESS_MSG CreateProcess;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} SB_API_MSG, *PSB_API_MSG;
|
||||||
|
|
||||||
|
//
|
||||||
|
// This is the size that Server 2003 SP1 SMSS expects, so make sure we conform.
|
||||||
|
//
|
||||||
|
C_ASSERT(sizeof(SB_CONNECTION_INFO) == 0xF4);
|
||||||
|
C_ASSERT(sizeof(SB_API_MSG) == 0x110);
|
||||||
|
|
Loading…
Reference in a new issue