EvanZhu0721 / 公开仓库
SBMS
SBMS complete the calculation rules for the default logical desktop topology relationship and the physical dimensions of the displays in the Windows multi-screen collaboration system.
文件
../ architecture.md2.3 KBconfiguration.md4.9 KBgeometry.md2.4 KBlogical-desktop-size-observation.md3.4 KBmapping-plan.md4.9 KBdocs/architecture.md2.3 KB
1
# Architecture2
3
SBMS keeps policy in Rust and limits the C++ driver to the WDF/IddCx boundary.4
5
```text6
tray / CLI7
-> mapping plan lifecycle8
-> protected multi-output session gate9
-> software display device10
-> minimal UMDF indirect-display driver (one stable connector per group)11
-> mirror groups: Desktop Duplication -> D3D11 scaling -> target window12
-> stream-only groups: virtual desktop stays available to an external capturer13
```14
15
The v7 gate contains up to sixteen connector-indexed modes. Its ACL permits the16
launching user, SYSTEM, LocalService and Administrators. One IDD adapter17
publishes every requested connector and drains their IddCx swap chains; it does18
not copy frames into shared memory. Connector indexes are stable identities and19
must not be inferred from Windows enumeration order.20
21
Pixels remain on the GPU in the Rust renderer. For reductions up to 2:1 per22
axis, the shader integrates source-pixel area and suppresses high-frequency23
subpixel colour fringing. Other ratios use bilinear sampling.24
25
The whole plan starts and stops as one transaction. Startup creates and26
confirms every virtual source before any mirror renderer starts. Shutdown27
releases all input capture and rendering, restores migrated windows, closes the28
single software-device handle, waits for every planned connector to disappear,29
and restores the saved physical topology once.30
31
User configuration is stored as at most three named profiles in32
`%LOCALAPPDATA%\SBMS\config-profiles-v1.json`. The collection, active profile33
and per-profile revisions are committed atomically under a cross-process lock.34
On first use, the existing `config-v2.json` is preserved and imported as the35
`default` profile. The tray supports revision-checked live reloads without36
changing a mapping that is already running. See37
[configuration.md](configuration.md) for the storage, CLI, JSON and Rust API38
contracts.39
40
An overwrite upgrade first asks the installed tray to exit cleanly so its41
in-memory edits are persisted. Setup then copies the current configuration and42
display overrides into a SHA-256-verified timestamped snapshot under43
`%LOCALAPPDATA%\SBMS\upgrade-backups`. Failure to stop the tray or verify the44
snapshot cancels the overwrite; normal uninstall remains responsible for45
removing user data.46
47
See [mapping-plan.md](mapping-plan.md) for the Rust and JSON interfaces.48