会话(session)、工作站(WindowStation)、桌面(Disktop)、窗口(window)

转载 2016年05月31日 09:45:44


     一个系统可以同时登录多个用户(包括远程用户登录)
    一个用户拥有一个会话(远程用户被称为远程会话)
    一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
    一个会话拥有一系列私有的进程和模块:Csrss.exe、WinLogin.exe、win32k.sys
    一个会话拥有一个私有对象名字空间(\BaseNamedObjects),私有对象名字空间中的内核对象不能被其他会话访问。
    一个交互式工作站最少拥有三个桌面:默认桌面、登陆桌面、屏保桌面
    一个非交互式工作站最少拥有一个桌面
    一个桌面拥有0-N个窗口(非交互式工作站中的桌面可以没有窗口)
    一个与用户交互的桌面拥有一个Explorer.exe进程
    窗口必须与一个桌面绑定
    窗口之间不能跨桌面访问



windows用户登录过程
[先看一下相关进程启动顺序]
电脑开机到第一次用户登录:
-Idle
-system
--smss.exe
---autochk.exe
---win32k.sys
---csrss.exe
---wininit.exe win8系统才有的进程,应该vista以后都有该进程
----services.exe 
----lsass.exe

---winLogin.exe
----services.exe 启动系统服务和加载Auto驱动,win8系统由wininit.exe负责加载
----lsass.exe
 win8系统由wininit.exe负责加载
----logonui.exe 此进程显示欢迎界面,在该页面选择用户并输入密码(如果只有一个用户,并且没有密码,则欢迎界面会一闪而过)
----userinit.exe
-----explorer.exe

第二个用户登录:
1. 当在当前用户的开始菜单中选择“注销”按钮,在弹出的窗口中选择“切换用户”按钮
2. 这时当前用户的winLogin.exe创建loginui.exe,显示欢迎界面,等待选择用户和输入密码。
2. 输入账号和密码以,并验证通过后,则:
--smss.exe
---win32k.sys
---csrss.exe
---winlogin.exe
----logonui.exe (该进程并不会再次显示欢迎界面,并随后退出)
----userinit.exe
-----explorer.exe


以上进程启动顺序,经过实际调试测试而出。测试机:xp sp3。


在windows启动后,相关初始化进程相续启动。最开始只有idle和system进程。
system进程初始化BOOT_START类型的驱动程序;加载SYSTEM_START类型的驱动程序并初始化;创建smss.exe进程。

smss.exe是会话管理器进程,负责用户登录和登出管理。
smss.exe紧接着创建autochk.exe检查磁盘,加载win32k.sys子系统内核模块;创建csrss.exe子系统进程;创建wininit.exe进程(此处xp上没有,应该vista以后增加的);创建winLogin.exe进程。

csrss.exe将会管理所有由该会话创建的进程和线程(它将会拥有这些进程和线程的句柄,用来接收相关通知和向他们发送通知。如用户登出时向他们发送退出通知)。

winlogin.exe紧接着创建services.exe和lsass.exe进程。这两个进程在vista以后,由wininit.exe创建。(不确定是不是vista以后增加的,我的win8系统是有wininit.exe进程)
winlogin.exe创建logonui.exe进程。这个时候,显示欢迎界面,选择账号,输入密码就可以登录到系统中了。

输入的密码验证通过后,winlogin会创建userinit.exe进程用来对该用户初始化工作。
当初始化工作做完了,userinit.exe就会启动explorer.exe,这个时候进入到工作桌面了,我们可以工作了,上网、玩游戏、挂QQ,不亦乐乎~

WinLogin.exe除了上面说的工作外,还会做如下事情:

    初始化 Winsta0工作站。(这是第一个工作站,也是该会话中唯一一个交互式工作站,拥有可视化界面和接收鼠标和键盘输入的能力。)
    为Winsta0创建桌面。创建3个桌面:默认桌面、登陆桌面、屏幕保护桌面。默认桌面是咱们俗称的“桌面”。登陆桌面是按下CTRL+ALT+DELETE组合键后显示的桌面,该桌面只能被winLogin.exe访问,防止被非法进程劫持。
  


用户登录完成,这个时候运行程序,如果该程序拥有窗口,不指定所属桌面的话,该窗口属于当前桌面。当然,你可以为你的程序指定窗口和工作站:在CreateProcess时或者通过SetProcessWindowStation、SetThreadDesktop设置。

窗口属于windows子系统资源,属于win32k.sys中的内核对象。但是窗口必须与一个桌面绑定,多个窗口之间不能跨桌面访问。如使用FindWindow是无法找到其他桌面的窗口的,使用SetWindowsHookEx也无法捕获其他桌面窗口产生的消息。


创建一个工作站的方法:CreateWindowStation 

创建桌面的方法:CreateDesktop 、CreateDesktopEx 

创建窗口的方法:CreateWindow 、CreateWindowEx 

当存在多个交互式桌面的时候,俗称多桌面。必须只有一个可以接收键盘和鼠标消息。通过SwitchDesktop来切换当前桌面,通过OpenInputDesktop来打开具有接收键盘和鼠标消息的桌面。

一个会话拥有一个私有对象名字空间。如调用CreateEvent创建一个有名字的事件,可以指定"Global\" or "Local\"前缀。默认为Local。为Local时,只有该会话的进程才能访问该事件。为Global时所有的进程都可以访问该事件,这个用来创建一个全局事件。具有该特性的对象包括:事件(Event)、互斥量(mutex)、信号量(semaphore)、可等待的定时器(waitable timer)、Job、文件映射(file-mapping)内核对象。


转载 http://bbs.pediy.com/showthread.php?t=173271


相关文章推荐

会话(session)、工作站(WindowStation)、桌面(Desktop)、窗口(window)

一个系统可以同时登录多个用户(包括远程用户登录)     一个用户拥有一个会话(远程用户被称为远程会话)     一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。   ...

windows编程的偏门概念: 会话(Session), 窗口站(Window Station), 桌面

想实现向linux那样的多个虚拟桌面么?想知道让服务程序显示界面么?那么就认证看一下下面的说明吧。 1. 远程桌面会话 当一个用户登录到一个开启了远程桌面的机器时,便会开始一个该用户的会话...
  • zxy355
  • zxy355
  • 2016年03月03日 17:22
  • 655

Red Hat Enterprise Linux 6 “桌面”、“工作站”、“服务器” 版本差异比较

Red Hat Enterprise Linux 6,共有三个版本。通过安装发现,所谓的“桌面”、“工作站”、“服务器”这三个版本的区别就在于它们默认安装软件库不一样。桌面版本默认安装的软件库主要面向...
  • mao0514
  • mao0514
  • 2015年01月21日 08:49
  • 3749

Actual Window Guard(桌面窗口置顶工具)

  • 2013年05月09日 12:13
  • 6.77MB
  • 下载

工作站桌面黑屏循环登录GPU识别问题总结

工作站黑屏+循环登陆+GPU识别问题一:桌面循环登录原因:可能是显卡驱动冲突(工作站上原来有多个版本的Navida驱动) 解决方法: 1. 将所有NVIDIA驱动卸载sudo apt-get re...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:会话(session)、工作站(WindowStation)、桌面(Disktop)、窗口(window)
举报原因:
原因补充:

(最多只允许输入30个字)