由于不是搞安全的,对这块的东西一直不是很清楚,今天特意整理下。

总的来说,他们的关系如下:

我们知道Windows是支持多用户的,Session可以理解为每个用户登录,比如当前登录和远程登陆。
Window Stations可以理解为登陆后的不同用户组,我们在任务管理器中可以看到不同的用户名(比如 Richard, system, local service等),其中只有一个活动Station WinSta0, 只有这个Station是接受用户鼠标键盘输入的。而WinSta0 Station 又包括3个Desktop(包括Winlogon, Disconnect, Default), 其中Winlogon指的是登陆Desktop,当我们按Ctrl+Alt+Del时就会进入该Desktop;Disconnect指的是屏保Desktop; Default指的就是我们平时有任务栏的Desktop, 当然真正的Default Desktop是没有应用程序的在上面的,我们看到的桌面其实是启动Shell Explorer后的界面。

总结几点和我们平时写程序有关的: 
(1)我们平时通过GetDesktopWindow()得到的桌面句柄, 是Csrss.exe创建的一个窗口,它被放在WinStation内的Desktop内. 
而我们通过Win+D看到的桌面, 其实是Expolore.exe创建的一个Pop up窗口, 它和我们普通的pop up 窗口一样, Owner是GetDesktopWindow()
(2)我们可以通过CreateDesktop, OpenDesktop, SwitchDesktop等API创建和切换Desktop。
(3)我们平时写服务程序时发现窗口弹不出来, 因为服务不是运行在Station WinSta0下面. 通过FindWindow也找不到我们要找的窗口,因为它下面没有我们的当前WinStation
的Desktop。
(4)一个window station 对象包括一个剪贴板、一个全局原子集和多个Desktop对象, 所以你可以在同一个一个window station内的多个Desktop之间通过剪贴板传送数据.
(5)所有的进程都和Session, WinStation, Desktop相关联,所以我们可以把它表示成这样一个路径: Session 1\WinSta0\Default, 这样我们也就理解为什么有些API需要我们传类似这样的信息.

参考资料:

 
http://www.cppblog.com/weiym/archive/2012/05/12/174701.html

Sessions, Window Stations and Desktops(GetDesktopWindow函数得到的桌面句柄, 是Csrss.exe创建的一个窗口)的更多相关文章

  1. python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名。

    python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C: ...

  2. python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数

    练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() #列 ...

  3. CreateWindowEx failed (当前程序已使用了 Window 管理器对象的系统允许的所有句柄。)

    我在QT图形场景视图中通过QGraphicsProxyWidget添加代理Widget(实现添加基本的QT Widget,如按钮.复选框.日期时间控件等),当数量超过3500左右的时候,QT应用程序直 ...

  4. Window系统远程连接Linux服务器(非桌面系统)

    Window系统远程连接Linux服务器(非桌面系统) Window系统远程连接Linux服务器(非桌面系统),步骤: 第一步:下载Xshell远程登录软件:第二步:设置Linux服务器的IP.端口. ...

  5. 要生成一个窗口,通常使用Window的子类Frame类进行实例化

    要生成一个窗口,通常使用Window的子类Frame类进行实例化,而不是直接使用Window 类,框架的外观就像平常Windows系统下的窗口,有标题.边框. 菜单 和大小等. setSize()方法 ...

  6. js进阶 12-8 如何知道上一个函数的返回值是什么(如何判断上一个函数是否执行成功)

    js进阶 12-8 如何知道上一个函数的返回值是什么(如何判断上一个函数是否执行成功) 一.总结 一句话总结:event的result属性即可. 1.event的result属性的实际应用场景是什么? ...

  7. js函数声明外面使用小括号括起来再接一个小括号的写法

    js函数声明外面使用小括号括起来再接一个小括号的写法 (function(){})(); (function(){}()); !function(){}(); 总结ps:意思将函数声明变成,直接执行的 ...

  8. JavaScript: window.onload = function() {} 里面的函数不执行

    问题:写了一个最简单的页面.在script标签中使用的 window.onload = function() { function add() { //... } } 页面上:<div oncl ...

  9. window.onload 添加多个函数绑定

    window.onload = function(){alert(2)} function addEvent (fun) { var old = window.onload; if(typeof ol ...

随机推荐

  1. C# winform如何清除由Graphics类绘制出来的所有线条或图形

    在C#winform应用程序中,可以用GDI绘制出线条或图形. 1.在主窗体上绘制线条或图形 using (Graphics g = this.CreateGraphics())      {    ...

  2. 将汉字转为UTF-8编码

    01./** 02. * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. 03. * @param s 原文件名 04. * @return 重新编码后的文件名 05. */ ...

  3. HDU-3665(单源最短路)

    Problem Description XiaoY is living in a big city, there are N towns in it and some towns near the s ...

  4. 如何断开eclipse与svn的链接

    右键点击需要断开的项目 Team-->Disconnect 如果想删除svn配置文件,选择Also delete the SVN meta information from the file s ...

  5. JAVA的RSA加密算法工具类

    须要用到一个jar http://www.bouncycastle.org/latest_releases.html 须要注意的问题 JS用同一秘钥生成的密文用java解密出来是逆序的,即js加密12 ...

  6. XMPP通讯开发-好友获取界面设计

    在XMPP通讯开发-服务器连接 中我们成功连接到服务器上面,然后进入到主界面,接下来就是获取好友列表,这里我们分段开发,首先就是界面的设计,这里仿照QQ好友界面,里面的数据先是用模拟的,下一章获取服务 ...

  7. python实现websocket服务器,可以在web实时显示远程服务器日志

    一.开始的话 使用python简单的实现websocket服务器,可以在浏览器上实时显示远程服务器的日志信息. 之前做了一个web版的发布系统,但没实现在线看日志,每次发布版本后,都需要登录到服务器上 ...

  8. Log4Qt 使用(一)

    一.下载 http://sourceforge.net/projects/log4qt/develop 二.Log4Qt介绍 Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的 ...

  9. Java基础知识强化34:String类之String类的转换功能

    1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...

  10. 带搜索功能,支持绑定对象到节点的TreeView辅助类

    特点: 1.支持数叶子节点与对象绑定 2.支持xml导入,且数据类相关的xml可自定义,只和泛型的实现有关 3.支持节点搜索功能,可在树结构上要求只显示部分节点 4.用C#编写,但与平台关联性低,可移 ...