reactos/sdk/lib/smlib/readme.txt
Hermès Bélusca-Maïto 0e14378d3e
[SMDLL][SMLIB] Deprecate the legacy ROS-specific SMDLL and improve SM client functions. (#4821)
This DLL was exporting legacy NT-incompatible or ROS-specific SM client
functions, that have been since 10 years now (2012) replaced by the new
NT-compatible SM:

- SmConnectApiPort(): was just SmConnectToSm().

- SmCompleteSession():
  The legacy SMSS used it for when a subsystem initialization was finished.
  Now (NT-compatible) this function is called by subsystems **only** when a
  subsystem session **terminates**: SmSessionComplete().

- SmExecuteProgram(): was just the client side of SmLoadDeferedSubSystem()
  (whose server side is not implemented yet). The legacy SM "old" SmExecPgm
  implementation actually was "SmLoadDeferedSubSystem"...

- SmLookupSubsystem(): is a utility-only function to read any registry value
  inside "Session Manager\SubSystems".

Move SMDLL's readme into SMLIB and update its contents.

Collect some residual useful functions into smutils.c (and moved in SMLIB,
though not compiled yet):
- SmExecuteProgram(), now implemented as a wrapper around SmExecPgm();
- SmLookupSubsystem(), described above;
- SmQueryInformation(), that retrieves a list of currently-running subsystems.

[SMLIB] Validate SbApiPortName's length in SmConnectToSm().
Fix CommandLine length validation in SmStartCsr().

Add documentation (+ SAL annotations) to the NT-compatible SMSS client functions.

smmsg.h: Add both Win32 and Win64 struct sizes C_ASSERTs for those whose size
change between these two processor architecture sizes.

[SMLIB] Introduce SmSendMsgToSm() as helper to send data into the SM LPC port.
+ Make the other API functions use it.

It should be observed that in Vista+, both functions SmConnectToSm() and this
new SmSendMsgToSm() are exported by NTDLL under the names RtlConnectToSm()
and RtlSendMsgToSm() (and use the same signature).
See: https://www.geoffchappell.com/studies/windows/win32/ntdll/history/names60.htm

[NTDLL] Correctly stub RtlConnectToSm() and RtlSendMsgToSm().
[NTDLL_VISTA] Link to SMLIB and simply export RtlConnectToSm() and RtlSendMsgToSm().
2022-11-08 17:40:53 +01:00

67 lines
2.2 KiB
Text

SMLIB: Client Library to talk to the ReactOS NT-Compatible Session Manager (SM).
It should be linked in the following components:
a) the SM itself, because it registers for managing native processes
IMAGE_SUBSYSTEM_NATIVE;
b) environment subsystem servers, because each one should register in
the SM its own subsystem (willing to manage those processes);
c) application launchers (e.g. terminal emulators) for optional subsystems,
to ask the SM to start the optional subsystem server they need to connect;
d) system and development utilities to debug/query the SM.
2004-02-15 ea
2022-11-03 hbelusca
How a subsystem uses these APIs
===============================
Thread #0 Thread #1
- Creates its own directory (\EXAMPLE)
- Initializes the main parts of the subsystem.
- Creates its main API port (\EXAMPLE\ApiPort),
and servicing thread for it. Programs running
under this subsystem will communicate with
this API port.
- Creates its SM callback API port (\EXAMPLE\SbApiPort)
and servicing thread T1.
- Waits connection requests on the
callback port (\EXAMPLE\SbApiPort)
- Registers to the SM by calling
SmConnectToSm(
"\EXAMPLE\SbApiPort",
hSbApiPort,
SUBSYSTEM_ID,
&hSmApiPort);
- As the SM calls back, validates
and accepts connection.
- The subsystem is now ready to
manage processes, etc.
-----
Thread #N Thread #1
- The SM calls back the subsystem
SbCreateSession() API, so that it
can initialize a new environment
session (with associated SessionId).
- When no more processes to manage exist,
terminate the subsystem session by calling
SmSessionComplete(
hSmApiPort,
SessionId,
ExitStatus);
- The SM calls back the subsystem
SbTerminateSession() API.