Evan's Blog
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.

上游 GitHub
READ-ONLY MIRROR

README、源码与 Release 已保存到本站;源码视图固定到 commit a37d6c4b。

main/ root / docs
a37d6c4b· 固定源码快照
docs/architecture.md2.3 KB
预览
1# Architecture
2
3SBMS keeps policy in Rust and limits the C++ driver to the WDF/IddCx boundary.
4
5```text
6tray / CLI
7 -> mapping plan lifecycle
8 -> protected multi-output session gate
9 -> software display device
10 -> minimal UMDF indirect-display driver (one stable connector per group)
11 -> mirror groups: Desktop Duplication -> D3D11 scaling -> target window
12 -> stream-only groups: virtual desktop stays available to an external capturer
13```
14
15The v7 gate contains up to sixteen connector-indexed modes. Its ACL permits the
16launching user, SYSTEM, LocalService and Administrators. One IDD adapter
17publishes every requested connector and drains their IddCx swap chains; it does
18not copy frames into shared memory. Connector indexes are stable identities and
19must not be inferred from Windows enumeration order.
20
21Pixels remain on the GPU in the Rust renderer. For reductions up to 2:1 per
22axis, the shader integrates source-pixel area and suppresses high-frequency
23subpixel colour fringing. Other ratios use bilinear sampling.
24
25The whole plan starts and stops as one transaction. Startup creates and
26confirms every virtual source before any mirror renderer starts. Shutdown
27releases all input capture and rendering, restores migrated windows, closes the
28single software-device handle, waits for every planned connector to disappear,
29and restores the saved physical topology once.
30
31User configuration is stored as at most three named profiles in
32`%LOCALAPPDATA%\SBMS\config-profiles-v1.json`. The collection, active profile
33and per-profile revisions are committed atomically under a cross-process lock.
34On first use, the existing `config-v2.json` is preserved and imported as the
35`default` profile. The tray supports revision-checked live reloads without
36changing a mapping that is already running. See
37[configuration.md](configuration.md) for the storage, CLI, JSON and Rust API
38contracts.
39
40An overwrite upgrade first asks the installed tray to exit cleanly so its
41in-memory edits are persisted. Setup then copies the current configuration and
42display overrides into a SHA-256-verified timestamped snapshot under
43`%LOCALAPPDATA%\SBMS\upgrade-backups`. Failure to stop the tray or verify the
44snapshot cancels the overwrite; normal uninstall remains responsible for
45removing user data.
46
47See [mapping-plan.md](mapping-plan.md) for the Rust and JSON interfaces.
48