windows之 会话、工作站、桌面、窗口之间的关系
2013-06-08 22:31
274 查看
一个系统可以同时登录多个用户(包括远程用户登录)
一个用户拥有一个会话(远程用户被称为远程会话)
一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
一个会话拥有一系列私有的进程和模块:Csrss.exe、WinLogin.exe、Lsass.exe、win32k.sys
一个会话拥有一个私有对象名字空间(\BaseNamedObjects),私有对象名字空间中的内核对象不能被其他会话访问。
一个交互式工作站最少拥有三个桌面:默认桌面、登陆桌面、屏保桌面
一个非交互式工作站最少拥有一个桌面
一个桌面拥有0-N个窗口(非交互式工作站中的桌面可以没有窗口)
一个与用户交互的桌面拥有一个Explorer.exe进程
窗口必须与一个桌面绑定
窗口之间不能跨桌面访问
网上介绍相关知识的文章很少,该篇文章是通过MSDN、网络文章、Windows相关书籍、实际实验中总结而来。
windows用户登录过程
在windows启动后,第一个用户登陆前,只有system和smss.exe进程。system是系统进程,smss.exe是会话管理器进程,负责用户登录和登出管理。这两个进程属于system用户进程。
当一个会话登录后,smss.exe会创建csrss.exe和winLogin.exe和加载win32k.sys。csrss.exe是客户端服务器运行时子系统进程,WinLogin.exe是登陆进程。win32k.sys是客户端服务器运行时子系统内核模块。
csrss.exe将会管理所有由该会话创建的进程和线程(它将会拥有这些进程和线程的句柄,用来接收相关通知和向他们发送通知。如用户登出时向他们发送退出通知)。
WinLogin.exe在工作期间也会负责很重要的职责。winLogin的职责如下:
初始化 Winsta0工作站。(这是第一个工作站,也是该会话中唯一一个交互式工作站,拥有可视化界面和接收鼠标和键盘输入的能力。)
为Winsta0创建桌面。创建3个桌面:默认桌面、登陆桌面、屏幕保护桌面。默认桌面是咱们俗称的“桌面”。登陆桌面是按下CTRL+ALT+DELETE组合键后显示的桌面,该桌面只能被winLogin.exe访问,防止被非法进程劫持。
创建services.exe进程。services.exe是服务控制管理器进程,用来启动Windows服务。这个时候会有其他非交互式工作站被创建。由于服务进程属于非交互式工作站进程,所以,服务进程是不能弹出窗口的,就是弹出窗口用户也看不见。另外,services.exe不能被多开,防止多个用户登录时,windows服务被多次启动。
创建lsass.exe进程。lsass.exe是本地安全权威子系统。用来在登录、注销、和口令操作过程中交换信息。
启动Userinit.exe。初始化该用户信息。UserInit.exe会创建Explorer.exe,该进程属于Shell进程。这个时候我们就看到亲切的“桌面”了。
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)内核对象。
再次总结:
一个系统可以同时登录多个用户(包括远程用户登录)
一个用户拥有一个会话(远程用户被称为远程会话)
一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
一个会话拥有一系列私有的进程和模块:Csrss.exe、WinLogin.exe、Lsass.exe、win32k.sys
一个会话拥有一个私有对象名字空间(\BaseNamedObjects),私有对象名字空间中的内核对象不能被其他会话访问。
一个交互式工作站最少拥有三个桌面:默认桌面、登陆桌面、屏保桌面
一个非交互式工作站最少拥有一个桌面
一个桌面拥有0-N个窗口(非交互式工作站中的桌面可以没有窗口)
一个与用户交互的桌面拥有一个Explorer.exe进程
窗口必须与一个桌面绑定
窗口之间不能跨桌面访问
转载请注明出处。ddlx studio。点点灵犀。 http://blog.csdn.net/sunyikuyu
一个用户拥有一个会话(远程用户被称为远程会话)
一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
一个会话拥有一系列私有的进程和模块:Csrss.exe、WinLogin.exe、Lsass.exe、win32k.sys
一个会话拥有一个私有对象名字空间(\BaseNamedObjects),私有对象名字空间中的内核对象不能被其他会话访问。
一个交互式工作站最少拥有三个桌面:默认桌面、登陆桌面、屏保桌面
一个非交互式工作站最少拥有一个桌面
一个桌面拥有0-N个窗口(非交互式工作站中的桌面可以没有窗口)
一个与用户交互的桌面拥有一个Explorer.exe进程
窗口必须与一个桌面绑定
窗口之间不能跨桌面访问
网上介绍相关知识的文章很少,该篇文章是通过MSDN、网络文章、Windows相关书籍、实际实验中总结而来。
windows用户登录过程
在windows启动后,第一个用户登陆前,只有system和smss.exe进程。system是系统进程,smss.exe是会话管理器进程,负责用户登录和登出管理。这两个进程属于system用户进程。当一个会话登录后,smss.exe会创建csrss.exe和winLogin.exe和加载win32k.sys。csrss.exe是客户端服务器运行时子系统进程,WinLogin.exe是登陆进程。win32k.sys是客户端服务器运行时子系统内核模块。
csrss.exe将会管理所有由该会话创建的进程和线程(它将会拥有这些进程和线程的句柄,用来接收相关通知和向他们发送通知。如用户登出时向他们发送退出通知)。
WinLogin.exe在工作期间也会负责很重要的职责。winLogin的职责如下:
初始化 Winsta0工作站。(这是第一个工作站,也是该会话中唯一一个交互式工作站,拥有可视化界面和接收鼠标和键盘输入的能力。)
为Winsta0创建桌面。创建3个桌面:默认桌面、登陆桌面、屏幕保护桌面。默认桌面是咱们俗称的“桌面”。登陆桌面是按下CTRL+ALT+DELETE组合键后显示的桌面,该桌面只能被winLogin.exe访问,防止被非法进程劫持。
创建services.exe进程。services.exe是服务控制管理器进程,用来启动Windows服务。这个时候会有其他非交互式工作站被创建。由于服务进程属于非交互式工作站进程,所以,服务进程是不能弹出窗口的,就是弹出窗口用户也看不见。另外,services.exe不能被多开,防止多个用户登录时,windows服务被多次启动。
创建lsass.exe进程。lsass.exe是本地安全权威子系统。用来在登录、注销、和口令操作过程中交换信息。
启动Userinit.exe。初始化该用户信息。UserInit.exe会创建Explorer.exe,该进程属于Shell进程。这个时候我们就看到亲切的“桌面”了。
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)内核对象。
再次总结:
一个系统可以同时登录多个用户(包括远程用户登录)
一个用户拥有一个会话(远程用户被称为远程会话)
一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
一个会话拥有一系列私有的进程和模块:Csrss.exe、WinLogin.exe、Lsass.exe、win32k.sys
一个会话拥有一个私有对象名字空间(\BaseNamedObjects),私有对象名字空间中的内核对象不能被其他会话访问。
一个交互式工作站最少拥有三个桌面:默认桌面、登陆桌面、屏保桌面
一个非交互式工作站最少拥有一个桌面
一个桌面拥有0-N个窗口(非交互式工作站中的桌面可以没有窗口)
一个与用户交互的桌面拥有一个Explorer.exe进程
窗口必须与一个桌面绑定
窗口之间不能跨桌面访问
转载请注明出处。ddlx studio。点点灵犀。 http://blog.csdn.net/sunyikuyu
相关文章推荐
- 白话windows之 会话、工作站、桌面、窗口之间的关系
- 白话windows之 会话、工作站、桌面、窗口之间的关系
- 会话、工作站、桌面、窗口之间的关系
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- 在tmux会话之间共享窗口(Windows & Panes)
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- CWnd类的对象和Windows窗口之间的关系
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- 会话(session)、工作站(WindowStation)、桌面(Disktop)、窗口(window)
- 会话(session)、工作站(WindowStation)、桌面(Desktop)、窗口(window)
- windows 2012域环境出现(此工作站和主域之间的信任关系失败)
- 在Windows远程桌面的不同会话之间,如何实现程序的互斥?
- MFC文档、视图、框架窗口、文档模板之间的相互关系
- windows编程的偏门概念: 会话(Session), 窗口站(Window Station), 桌面
- 窗口类、窗口类对象与窗口 三者之间关系
- 进程 、进程组、会话、控制终端之间的关系
- [11月21日的脚本] 改变Windows的窗口边框、桌面图标间距、桌面背景颜色和墙纸
- 关于windows 与 ubuntu(11.04)之间的远程桌面问题
- windows内核中Section/Segment/ControlArea/Subsection/MMVAD之间的关系