Microsoft Windows XP共享环境的探讨
中国哲士网“百科知识”为您提供生活百科
相 关 文 章
Win98与Win2000共存系统的优化
Windows 2000常见问题解答
鲜为人知的“Windows 2000/XP受限”问题
挽救崩溃的Windows系统
从Win98到WinMe升级须知
安装WinXP SP2后BT速度却变慢的原因
ADSL工作原理及宽带路由器选购指南
手机病毒ABC
嵌入式系统发展趋势
中国芯片产业高速成长 增速为同期全球之最
AMD64位移动CPU上市 戴尔仍表示不用其芯片
胡启恒委员建言:重要网站应注册使用CN域名
Windows XP系统注册表设置技巧
内存故障分析
防止IE浏览器被恶意修改的小技巧
快速重装Windows操作系统秘籍[三]
构建“不公开”的家用网络
网管培训教程之DOS命令(中篇)

本 站 统 计


 

Microsoft Windows XP共享环境的探讨

 


引言
无论是为Microsoft Windows XP 家庭版 或者 Windows XP 专业版编写应用程序,你都要牢牢记住的是,您的Windows XP (codename为Whistler)是一个个人系统,每个系统中的用户都有一个互相隔离的Windows XP用户帐户,在一个商业机构中,多个用户可能需要在同一台计算机上访问他们的E-mail以及使用所有他们自己的文档和设置。在一个家庭中,每一个家庭成员同样拥有一个隔离的帐户。

用户在安装系统的过程中,会创建他们各自的帐户,但是也可以在控制面板中进行,这些帐户的设置基于Windows 2000的用户配置文件(profiles)。默认的,这些帐户没有密码保护,用户可以对其进行设置。

如过有多个用户,登陆时系统将会弹出一个欢迎菜单每个用户都有一个相对应的图象,点击该图像即可登陆Windows XP系统。

快速用户切换
Windows XP引入了快速用户切换功能,在Windows XP中,当有另一个用户需要登陆系统时,当前用户不再需要注销。将始终保持登陆状态,而其它用户也可以实现在所有允许的帐户中进行快速切换。系统将支持许多用户同时处于登入状态。

例如,父亲回来了,他使用PowerPoint开始工作。这时儿子要求用一会计算机,他返回到欢迎界面,单击“儿子”图标,然后登陆并开始玩游戏。父亲这时仍处于登陆状态,儿子无须注销就可以让父亲重新快速切换会刚才打开的帐户,他的PowerPoint仍然打开着。当然,Internet连接也会被保持!

远程桌面
Windows XP的另一大特性是远程桌面,它能够允许用户在另一台计算机中访问数据和程序,在商业工作站中,Windows XP实现了从远程计算机中访问他们自己的桌面。你将可以在任何地方,任何时间,任何一台计算机中,通过互联网,连接到你在公司的Windows XP系统中,而且你可以做任何你在公司的Windows XP系统上能做到的事!

对于这个特性,我想如果Microsoft不认真对待它的安全问题,将是未来系统中的一大严重安全隐患!下文将进一步探讨

需求和基础结构
快速用户切换和远程桌面都需要运用到终端服务技术,并且支持绝大多数早先的WIN32应用程序。如果你的程序已被Windows 2000认证通过,你只需实现基本的用户配置文件分离及电源管理设置,你的应用程序将在Windows XP中很好的运行。当然,你可以也可以进行修改使程序在Windows XP中运行的更好。

在Windows XP提供了一个基础结构,这个基础结构支持所有版本的Windows XP,包括Professional和Home版本。这个基础结构支持用户数据、用户设置以及计算机设置的分离状态。应用程序适当的使用这个构造将有如下益处:

用户可以更方便的备份个人的文档和设置,而不必备份整个程序和系统文件。
正如我们已经知道的,多个用户可以共享同一系统而且仍然保留他的个人参数和设置。
一个用户可以在多台计算机中工作,以及在多台计算机之间维护他的文档、个人参数和设置。
而为了实现上述功能的需求也相当的简单:

使用默认的My Document文件夹存储用户数据。
以标准的方式存储应用程序数据。
对“Access Denied”信息别太在意。
新的会话区交换信息
通常情况下,当一个程序发生会话区交换时不需要被通告。某些情况下,应用程序可能需要知道当前的桌面,它可以注册一个会话交换通告。当程序访问串口或者其它的共享资源时,它会检查这个。使用Wtsapi32.h中的如下函数,:

BOOL WINAPI

WTSRegisterConsoleNotification(

HWND hWnd, // Window handle

DWORD dwFlags // Flags

);

被注册的 HWND 接收到 WM_WTSSESSION_CHANGE 消息。

在 dwFlags 你可以指定:

NOTIFY_FOR_THIS_SESSION

NOTIFY_FOR_ALL_SESSIONS

WTS_CONSOLE_CONNECT,

WTS_CONSOLE_DISCONNECT,

WTS_REMOTE_CONNECT

WTS_REMOTE_DISCONNECT

lParam 包含了会话相关的 sessionId 。

当进程不再需要或者中断这些通知,要调用下面的代码进行注销的工作。

BOOL WINAPI

WTSUnRegisterConsoleNotification(

HWND hWnd // window handle.

);

HWND 值传递到 WTSRegisterConsoleNotification 作为参考计数, 所以你要精确的告知 WTSUnRegisterConsoleNotification 你调用 WTSRegisterConsoleNotification时同样的号码。

应用程序 WM_WTSSESSION_CHANGE 消息将会跟踪这些状态, 如我们请求和释放Console-specific资源。

使程序在一种指定环境中运行
许多程序都需要确保程序只能在某一种指定情况下运行。有很多方法来实现:

1. 使用FindWindow或者FindWindowEx查找你运行的程序窗口。

2. 当程序运行时建立一个mutex或者semaphore并在退出时关闭。这样,这个全局对象将被分离,允许一个唯一的序列。

系统服务交互
从程序设计的立场,有两个案例需要说明:

1. 服务器收到来自客户端的请求进程,在这个案例中,信息可能是通过LPC或者RPC传送的,对客户端信息的获取,可以使用advapi32!CreateProcessAsUser。

2. 可以使用公共API函数WTSGetActiveConsoleSessionID() 更改进程的ID值到当前状态的ID值。

以下为译者对这篇文章的一些看法和对文章中所介绍的新特性带来得问题进行探讨
1. 上文中提到“早先的WIN32应用程序不需要进行任何更改就可以在Windows XP中使用”我认为这个说法有些牵强,因为在Windows XP中,使用了新的控件:ComCtl32 v6,它是ComCtl32的版本6。而在之前的Windows操作系统中,使用的是版本5,它不能提供Windows XP中的新外观效果,分组查看(即在任务栏中将同类型的按钮进行分组)等效果。所以,我想在先前的Windows系统中能正常运行的程序,需要在ComCtl32 v6的环境下经过调试,才可以在Windows XP下运行。

2. 对于另外一个特性:远程桌面,这个特性比较类似Windows 2000的终端服务,中文Windows 2000中就有个终端服务漏洞,不知道这次会出现什么新的定时炸弹~

3. 简要介绍一下这篇文章所介绍的重要的新特性之一 ——

快速用户切换的常识性知识:

快速用户切换的基础是Windows 2000 Terminal Server和Windows 2000的计算机共享,在登陆时它以一个欢迎屏幕代替了传统的登陆对话框,上面有用户名、和用户设置的相应图片,而不是登陆对话框中的用户名,每个用户和Windows 2000一样,有自己的各项设置,并且所有用户都是处于登陆状态。

4.针对这个特性:快速用户切换,我想有一点非常值得注意,就是它能够支持系统同时运行着多个本地登陆用户的程序,并且Internet连接也会被保持!不能否认,这确实是操作系统中的一大突破,它把以以前只能在网络服务器中实现的多用户模式在本地登陆的用户上实现了。但是,如果说在一个用户使用计算机时,有另外一个用户在完全没有任何记录或者未经过任何确认的情况下,就可以在后台运行应用程序,那么这将对整个系统的安全性带来很大的隐患,如果在被暂时“注销”的用户,后台运行着某些非法程序,而微软为了保护用户的隐私而不会对当前运行的用户进行任何提示的话,那么让一台Windows XP瘫痪甚至利用特殊的程序取得系统的最高权限将不是件难事!而如果微软考虑到这方面的问题,对另一个用户的应用程序进行限制,这样就很可能正常程序在执行中因为某些必要数据无法获取而意外终止,如果是重要程序的话,甚至很有可能导致系统崩溃;或者在系统出现异常时提示当前正在使用系统的用户,那么使用Windows XP的用户就会质疑微软对用户隐私的保护是否完善。不知道微软的大师们会用什么高招解决这些问题……