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.