窗口站&桌面

窗口站

一个窗口站是一个安全对象,其中包含一个剪贴板,一系列的 全局原子以及一组 桌面对象。分配给一个交互式用户登陆会话的交互式窗口站还包含键盘,鼠标和显示设备。交互式的窗口站对用户可见并且能接受来自用户的输入。所有其它的窗口站对用户都是非交互的,这意味着它们对用户不可见,也不能接受用户输入。
桌面
桌面是包含在窗口站中的安全对象,一个桌面有一个逻辑显示表面并且包含着窗口,菜单和钩子;一个windows的窗口站能有多个桌面,仅有可交互的窗口站的桌面能被显示以及接受用户输入。在一个可交互的窗口站上,同一时刻仅有一个 活动桌面活动桌面也被称为输入桌面,是当前显示给用户并接受用户输入的桌面。应用程序能够使用OpenInputDesktop函数来获得输入 桌面都句柄;具有一定访问权限都应用程序,还能够使用SwitchDesktop函数来指定一个不同的输入桌面;
交互式服务:
交互式服务是一个能和输入 桌面活动桌面)交互的服务。其它的 桌面不能够接收用户的输入。
交互服务必须运行在 LocalSystem 帐户的上下文中,进行配置后以交互方式运行。在调用 CreateService函数时指定dwServeceType参数为SERVICE_INTERACTIVE_PROCESS 旗标,服务就能够被配置为以交互的方式运行。但是,下面的 注册表项包含一个的值NoInteractiveServices,用于控制该 SERVICE_INTERACTIVE_PROCESS 标志的影响:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
NoInteractiveServices的默认值为0,意味着有SERVICE_INTERACTIVE_PROCESS标志的服务能以交互的方式运行。当 NoInteractiveServices 值设置为非零值时,在那之后启动的服务,无论它是否设置了SERVICE_INTERACTIVE_PROCESS,都不能以交互都方式运行;
窗口站和 桌面都创建:
系统会自动创建交互式窗口站。 当一个交互式的用户登录时,系统会将交互式窗口站和用户的登录会话相关联。 系统还将为交互式窗口站创建默认输入 桌面
当一个非交互都进程,如win32服务尝试连接到一个win32(系统)并且进程的登陆会话中并没有窗口站存在时,Win32 会尝试为会话创建一个窗口站和桌面。 创建的窗口站的名称基于该登录会话标识符并且桌面被命名为"default"。窗口站和 桌面的自由 访问列表DACL允许服务的 用户账户拥有如下存取权限:
WindowStation: WINSTA_READATTRIBUTES | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS | STANDARD_RIGHTS_REQUIRED
Desktop: DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU | DESKTOP_HOOKCONTROL | DESKTOP_ENUMERATE | STANDARD_RIGHTS_REQUIRED
一个进程能使用 CreateWIndowStation函数来创建一个新的窗口站,并调用CreateDeskTop函数创建一个新的 桌面
进程和窗口站的连接:
当一个进程第一次调用USER32或GDI32的函数(其它的窗口站或 桌面函数),必须转到win32服务时,进程能够与窗口站和 桌面自动的产生一个连接。Wiin32服务依据下面的规则来判断窗口站应该和那一个进程连接:
如果进程调用了SetProcessWindowStation函数,它就和函数指定的窗口站连接。
如果进程并没有调用SetProcessWindowStation函数,它就和从 父进程继承而来的窗口站连接。
如果进程没有调用SetProcessWindowStation函数,也没有继承到窗口站,那么win32服务尝试打开MAXIMUM_ALLOWED权限并按如下方式连接一个窗口站:
当创建进程时,如果一个窗口站的名称在STARTUPINFO结构的lpDeskTop成员中被指定并传递给CreateProcess函数,那么进程就和指定的窗口站连接。否则,如果这个进程在一个交互式用户的登陆会话中运行,进程就和交互式窗口站连接。
如果进程运行在一个非交互的登陆会话中,窗口站命名形式基于登陆会话标识并尝试去打开窗口站,如果打开失败是因为这个窗口站不存在,那么win32尝试去创建一个窗口站和一个默认的 桌面
与窗口站(WindowStation)相关API函数:
CreateWindowStation,OpenWindowStation,CloseWindowStation,GetProcessWindowStation,
SetProcessWindowStation,EnumWindowStationProc, EnumWindowStations
桌面(Desktop)相关API函数:
CreateDesktop, OpenDesktop,OpenInputDesktop,SwitchDesktop,CloseDesktop,GetThreadDesktop,SetThreadDesktop,EnumDesktopProc,EnumDesktops, EnumDesktopWindows
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值