mirror of
https://github.com/reactos/reactos.git
synced 2024-09-07 03:11:07 +00:00
68 lines
2.2 KiB
Plaintext
68 lines
2.2 KiB
Plaintext
![]() |
|
||
|
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.
|