全部博文(290)
分类: WINDOWS
2009-07-01 16:21:38
窗口站:
一个窗口站是一个安全对象,其中包含一个剪贴板,一系列的全局原子以及一组桌面对象。分配给一个交互式用户登陆会话的交互式窗口站还包含键盘,鼠标和显示设备。交互式的窗口站对用户可见并且能接受来自用户的输入。所有其它的窗口站对用户都是非交互的,这意味着它们对用户不可见,也不能接受用户输入;
桌面:
桌面是包含在窗口站中的安全对象,一个桌面有一个逻辑显示表面并且包含着窗口,菜单和钩子;一个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尝试去创建一个窗口站和一个默认的桌面;