会话(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


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

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

窗口站(Window station)和桌面(desktop)

窗口站(window station):包含剪贴板(clipboard),一个原子表,一个或多个桌面(desktop)对象.窗口站是一个保护对象,当一个窗口站被创建,它被分配到当前进程和当前会话(se...
  • Linux7985
  • Linux7985
  • 2010年06月25日 17:51
  • 2202

Windows中的桌面管理 Window Station and Desktop Creation

The system automatically creates the interactive window station. When an interactive user logs on, t...
  • dxl2005
  • dxl2005
  • 2010年10月27日 14:50
  • 1918

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

一个系统可以同时登录多个用户(包括远程用户登录)     一个用户拥有一个会话(远程用户被称为远程会话)     一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。   ...
  • linfengmove
  • linfengmove
  • 2015年10月29日 16:00
  • 949

会话、工作站、桌面、窗口之间的关系

会话(session)、工作站(WindowStation)、桌面(Disktop)、窗口(window)      一个系统可以同时登录多个用户(包括远程用户登录)     一个用户拥有一个...
  • zhoujiaxq
  • zhoujiaxq
  • 2013年12月09日 15:48
  • 797

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

一个系统可以同时登录多个用户(包括远程用户登录)     一个用户拥有一个会话(远程用户被称为远程会话)     一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。   ...
  • Rodney443220
  • Rodney443220
  • 2016年05月31日 09:45
  • 389

DeskTop与WorkStation使用两则

  经历过Windows 95以及之前版本的用户,都对Windows98之后的Windows可以支持多个显卡惊讶不已,其实从Windows98开始,Windows系统也可以支持多个桌面了,新的API提...
  • Linux7985
  • Linux7985
  • 2010年06月25日 17:54
  • 2737

远程桌面连接指定会话session

不管是哪个用户,先登录远程桌面 运行CMD输入query session查看在进行任务那个会话的ID然后再用tscon ID将当前会话转到需要的那个会话中...
  • lddongyu
  • lddongyu
  • 2010年05月20日 08:24
  • 940

windows之 会话、工作站、桌面、窗口之间的关系

一个系统可以同时登录多个用户(包括远程用户登录)一个用户拥有一个会话(远程用户被称为远程会话)一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。一个会话拥有一系列私有的进程和模...
  • sunyikuyu
  • sunyikuyu
  • 2013年06月08日 22:31
  • 1647

窗口站和桌面

窗口站:一个窗口站是一个安全对象,其中包含一个剪贴板,一系列的全局原子以及一组桌面对象。分配给一个交互式用户登陆会话的交互式窗口站还包含键盘,鼠标和显示设备。交互式的窗口站对用户可见并且能接受来自用户...
  • ListenerForTom
  • ListenerForTom
  • 2016年03月24日 08:52
  • 216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:会话(session)、工作站(WindowStation)、桌面(Disktop)、窗口(window)
举报原因:
原因补充:

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