V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
geelaw
V2EX  ›  分享发现

Surface Hub 2 支持同时使用两个账户(类似 Xbox One 的多人游戏)

  •  1
     
  •   geelaw · 2018-09-25 09:36:32 +08:00 · 1470 次点击
    这是一个创建于 2280 天前的主题,其中的信息可能已经有所发展或是发生改变。

    实际上这个功能 Windows 一直都支持,只是没有推广给普通用户。我想在这里解释一下。这篇文章并不是 blog 推广,因为我没有就该主题写一篇 blog entry。


    要理解这个概念,首先需要理解 session、window station、desktop、process、window 之间的关系。

    1. 一个 session 和一个 登录用户 关联,每当你从欢迎屏幕或者远程桌面连接登录,你就创建了一个新的 session。每个 process 都从属于一个 session。每个 session 还有自己的 USER 句柄表。
    2. 一个 window station 属于一个 session,一个 session 默认有且只有一个 window station,叫做 WinSta0,这是惟一可显示 UI 的 window station。每个 window station 有 惟一的剪贴板
    3. 一个 desktop 属于一个 window station,一个 window station 默认有且只有一个 desktop,同一时间 有且只有一个 desktop 可以显示在屏幕上,但可以用 SwitchDesktop 切换当前显示的 desktop。
    4. 一个 window 属于一个 desktop。
    5. 一个 process 可以在自己的 session 的不同 window station 之间移动;一个 thread 可以在自己进程当前的 window station 的不同 desktop 之间移动。

    为什么需要 window station 和 desktop 这样的设计呢?因为 USER 对象(例如 window 是 USER 对象)是不能设置 ACL 的;如果没有 window station 和 desktop 的抽象,一个 session 内的进程可以随便访问该 session 里的 window (包括发送恶意消息)。使用 window station 和 desktop 可以对 window 提供一些保护,因为任何线程都无法直接发送消息到不同 desktop 上的 window,而 window station 和 desktop 本身是有 ACL 的,因此没有足够权限的进程是没法访问受保护的 window station、desktop 上的 window 的。


    说了这么多,我们来举个例子,说明“同时用两个用户”是怎么实现的。我自己偶尔要用百度云管家,但是我不希望这个软件污染我的电脑。我平常用账户 GL,然后我创建了一个非管理员账户 BaiduPan,接着在 BaiduYun 里面(单用户模式)安装百度云管家。以后每当我需要用百度云管家的时候,我就在我的 session 下以 BaiduPan 的身份启动百度云管家(当然这是有脚本自动化的)。说得简单一些就是**“以其他用户运行程序”**。

    现在用上面的术语描述一下使用电脑的过程,就是:

    1. 我登录 GL,创建了一个 session,比如叫 session 1 ;
    2. session 1 里面建立了 WinSta0,里面建立了默认的 desktop ;
    3. 在我的 session 里面启动了 Windows Shell ;
    4. 我在我的 session 里面提供了 BaiduPan 账户的凭据,启动了它的百度云管家。

    结果:百度云管家以 BaiduPan 的身份在 GL 的 session、WinSta0 里的默认 desktop 里运行。

    因为剪贴板是 window station 级别的对象,因此我可以从自己身份的浏览器复制,并粘贴进百度云。


    查看我转发的 LiveSino 的视频和极力压缩到 140 字的解析

    在上面这个视频里,我们可以想象它是如此实现的:

    1. 系统自动用一个中性账户登录(产生了中性账户的 session ),比如这个中性账户可以是 Guest,或一个没有任何特定人资料访问权限的非管理员。
    2. 当用户通过指纹提供了自己的凭据,Windows 就以该用户的身份启动 Windows Shell (这里就是一个“最近文件启动器”)。
    3. 用户在启动器里面选择文件,启动器处于 Guest 的默认 desktop 里,进程所在的 desktop 默认是继承的,所以 Excel 仍然在这个 desktop 启动;进程的身份是继承进程的,所以启动器启动的 Excel 是提供了指纹的用户,因此可以访问那个用户的文档。
    4. 下一个用户通过指纹提供了自己的凭据,于是下一个用户身份的启动器出现,于是打开了下一个用户的 PowerPoint。
    5. Excel 和 PowerPoint 处于同一个 window station (因为在同一个 desktop ),所以可以从一个程序复制、在另一个程序粘贴。

    实际上,目前这些步骤本来就可以用桌面版本的 Excel、PowerPoint 实现。但是由于目前 UWP model 实现方式的原因,无法在 A 用户的 session 里以 B 用户的身份启动 UWP。从这个视频看,是新的实现允许了这件事情。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:00 · PVG 15:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.