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)
我一直认为会话和登录会话是一回事.
但是,阅读p. 474,Russinovich和Solomon,Windows内部,第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创建一个新的登录会话.如果我们使用Runas在不同的用户凭据下运行记事本,我们会看到它出现在桌面上.所以记事本和其他一样在同一台桌面上运行. (据我所知,Window Station Winsta0中的默认桌面是交互式窗口站)所以现在我们现在有两个与同一个Session相关联的登录会话(包含窗口站).所以会话和登录会话似乎不一样.
有人可以确认吗?
困惑
> logon session [2]由Local Security Authority管理,并管理用户登录的范围.它们主要由winlogon进程创建,也可以由API函数(如LogonUser
,CreateProcessAsUser
和CreateProcessWithLogonW
)或使用这些功能的应用程序(如runas
命令)创建.
登录会话不与window stations and desktops的任何特定Object Manager概念相关.它基本上只是一个信息块,其中包含有关该帐户的登录SID和一些缓存的安全信息.这个信息块,这个登录会话是access token所指向的.
>另一种类型的会话有时称为终端服务会话,终端服务器会话,Remote Desktop session,登录会话(如此令人困惑),用户登录会话或用户会话.通常,它只是被称为“会话”,没有进一步的资格.
这是你通常听到的会话类型,是window stations所属的会话.这种类型的会话came about支持由终端服务(现在称为Remote Desktop)提供的多个交互式GUI登录,现在也用于支持Fast User Switching.会话在与每个用户登录相关联的对象管理器对象之间提供必要的隔离.
我不会花太多时间弄乱所有这些东西,所以我有点模糊的一些细节,但我认为这是一个很公平的整体表现.我希望它能清理一些东西.