windows - session 、窗口站和桌面

标签 windows

session 、窗口站和桌面。

A session consists of all process and other system objects that represent a single user's logon session. Sessions contain Window Stations and Window Stations contain desktops.

以上来自http://blogs.technet.com/b/askperf/archive/2007/07/24/sessions-desktops-and-windows-stations.aspx

(类似的文章说同样的事情,例如 blogs.technet.com/b/askperf/archive/2007/04/27/application-compatibility-session-0-isolation.aspx 和 blogs.msdn.com/b/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx)

我一直将 session 和登录 session 理解为一回事。

但是,阅读 p. 474,Russinovich 和 Solomon,Windows Internals,第 5 版,它说(倒数第二段):

The CreateProcessWithLogon function also creates a token by creating a new logon session with an initial process, which is how the Runas command launches processes under alternative tokens.

因此 Runas 创建了一个新的登录 session 。如果我们使用 Runas 在不同用户的凭据下运行记事本,我们会看到它出现在桌面上。所以记事本和其他一切都在同一个桌面上运行。 (据我所知,这是 Window Station Winsta0 中的默认桌面;交互式窗口站。)所以我们现在拥有的是两个与同一 session 关联的登录 session (即包含窗口站)。因此 session 和登录 session 看起来不会是一回事。

请问有人可以确认吗?

困惑

最佳答案

这里确实有两种类型的 session 。这是我对它们工作原理的理解。

  1. A logon session <子>[ 2 ]Local Security Authority 管理<子>[ 2 ],并管理用户登录的范围。这些主要由 winlogon 创建过程,而且其次是通过 API 函数,如 LogonUser , CreateProcessAsUser , 和 CreateProcessWithLogonW ,或通过使用这些功能的应用程序,例如 runas命令。

    登录 session 未绑定(bind)到任何特定的 Object Manager <子>[ 2 ] 概念为 window stations and desktops .它基本上只是一个包含登录 SID 和一些缓存的帐户安全信息的信息 block 。这个信息 block ,这个登录 session ,是一个access token指向。

  2. 另一种 session 有时称为终端服务 session 、终端服务器 session ,Remote Desktop session 、登录 session (尽管如此令人困惑)、用户登录 session 或用户 session 。不过,通常它只是称为“ session ”,没有进一步限定。

    这是您通常会听到的 session 类型,也是 window stations 的内容属于。此类 session came about支持终端服务(现在称为 Remote Desktop )提供的多个交互式 GUI 登录,现在也用于支持 Fast User Switching . session 在与每个用户登录关联的对象管理器对象之间提供必要的隔离。

我没有花太多时间处理所有这些东西,所以我对一些细节有点模糊,但我认为这是对整体情况的相当公平的表述。我希望它能澄清一些事情。

关于windows - session 、窗口站和桌面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686897/

相关文章:

c# - 如何更改 Windows 资源管理器中使用的图标?

c - windows下如何拦截C库调用?

c - 如何在c中延迟(倒数)?

windows - 使用 KeSaveExtendedProcessorState 得到 BSOD

C++、Windows 服务和 msvcp140.dll

windows - 无法找到或加载主类 M - hadoop windows

python - 在 Windows 7 上安装 flask ?

c++ - 如何知道写入文件何时完成?

windows - vbscript 输出到控制台

windows - Vista/win7应用程序音量控制界面