摘要:
能够使应用程序成为外壳程序是 Windows XP Embedded 的关键功能之一。设备可以在自定义外壳程序而不是 Explorer 外壳程序中启动,这提供了两个好处。第一个好处是系统能够更快地启动。Explorer 外壳程序需要花费大量的时间来加载所有支持库和文件,而特定应用程序很可能需要加载较少的库。第二个好处是可以限制对设备的管理功能的访问,这完全取决于自定义外壳程序应用程序的编写方式。
限制用户对管理功能(例如,控制面板)的访问可能是好处,但存在一个小的缺点:管理员也会受到限制,除非管理员可以在不同的外壳程序中启动。
理想的解决方案是对 Windows XP Embedded 进行相应的设置,以便用户帐户可以在应用程序外壳程序中启动,而管理员帐户可以在管理外壳程序中启动。然后,Windows XP Embedded 中内置的安全性功能就可以防止用户访问管理功能。本文说明如何实现该解决方案。
本页内容
注册表是关键所在
工作原理
Windows XP Embedded 的设置
附注
小结
注册表是关键所在
Microsoft® Windows® XP 具有能够通过注册表提供解决方案的功能。可以设置每个用户帐户和管理员帐户的注册表以启动用户特有的外壳程序。有三个必须设置的项。头两个项是所有用户通用的。为了简单起见,本文将这些项称为“Key1”、“Key2”和“Key3”。
Key1 是字符串值。当 Windows XP 启动时,会调用 Key1 并启动默认的 Windows 外壳程序。但是,如果默认值被更改为 USR:Software/Microsoft/Windows NT/CurrentVersion/Winlogon,则Windows 会探测 HKEY_Current_User 项以便为登录的用户启动特定的外壳程序。如果未找到特定的用户外壳程序,则会调用 Key2 并启动默认的外壳程序。
项: HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/IniFileMapping/system.ini/boot/Shell类型: REG_SZ
值: SYS:Microsoft/Windows NT/CurrentVersion/Winlogon
如果找不到用户外壳程序应用程序,则 Key2 会提供默认的外壳程序。当您为 Microsoft Windows XP Embedded 配置选择外壳程序组件时,Key2 就被设置为作为默认外壳程序的外壳程序应用程序。
项: HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Shell类型: REG_SZ
值:Explorer.exe(或者可以是不同的默认应用程序)
Key3 为当前用户或登录用户设置外壳程序。因而,更改特定用户的外壳程序的唯一方式是登录用户帐户并创建该注册表条目。
项: HKEY_Current_User/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Shell类型: REG_SZ
值:c:/windows/system32/ account shell.exe,其中, account shell.exe 是应用程序的名称。
工作原理
当用户登录时,Windows 使用 Key1 确定哪个项保存了外壳程序信息。通常,Windows 会接下来使用 Key2。但是,如果 Key1 的值更改为 USR:Software/Microsoft/Windows NT/CurrentVersion/Winlogon,则 Windows 会为登录用户使用 Key3,以启动该用户的特定外壳程序。
在已经设置了注册表的系统中更改注册表项值相当简单。困难在于如何在 Windows XP Embedded 中完成该工作 — 在该平台上,注册表是在 First Boot Agent (FBA) 过程中设置的。
可以在目标设计器中设置 HKLM 项,因为它们是计算机特有的。但是,在目标设计器中设置 HKCU 项是不可能的,因为在 FBA 运行之前不会创建帐户。用户帐户和管理员帐户组件只创建帐户、用户名称和密码。这些组件无法用来设置特定的外壳程序。唯一的解决方案是在 Windows XP Embedded 映像已经完成 FBA 过程之后再设置特定的外壳程序。
Windows XP Embedded 的设置
在 Windows XP Embedded 中为不同用户生成不同外壳程序的窍门存在于设置之中。需要在配置中包含几个组件,以便可以为用户的帐户设置 Key3:
-
Windows Logon。因为映像中将包含不同的帐户,所以 Windows Logon (Standard) 是配置的必需组件。Windows Logon 支持在本地和远程登录不同帐户的能力。相比之下,Minlogon 组件只支持登录单个管理员帐户。
-
两个 User Account 组件。至少需要两个计算机帐户;其中至少有一个帐户必须是管理员帐户。可以通过“Extended Properties”页将 User Account 组件设置为管理员帐户。当用户帐户被设置为管理员帐户时,它会替换普通的“Administrator”帐户,就像在其他版本的 Windows XP 中一样。因为消除了管理员帐户,所以您可能希望考虑使用两个 User Account 组件实例。可以将一个组件设置为管理员(它将具有管理员外壳程序),并且可以将另一个组件设置为正规用户(它将具有系统外壳程序)。
-
Automatic Logon。大多数原始设备制造商 (OEM) 都希望它们的系统直接在应用程序中启动。可以将 Automatic Logon 组件添加到配置中,以便直接在用户帐户(它的外壳程序将是系统的应用程序)中启动。
-
Default Shell。Windows XP Embedded 附带了几个外壳程序:Explorer、Task Manager 和 Command。您还可以创建自定义外壳程序。外壳程序组件是配置中必需的。在为配置选择外壳程序组件时,外壳程序将是 Windows XP Embedded 映像的默认外壳程序,因此无须设置 Key2。
对于为不同用户设置不同的外壳程序而言,所选择的外壳程序组件将是管理员外壳程序,并且该外壳程序必须允许配置注册表以设置 Key3 的访问权限。Task Manager 可能是一个不错的选择。TaskManager 是一个小型外壳程序,可以用来启动其他应用程序,如 Control.exe(控制面板)或 Regedit.exe(注册表编辑器)。如果 TaskManager 外壳程序不合适,则您可能希望创建您自己的管理外壳程序。在 FBA 过程完成之后,所有帐户都将具有相同的管理员外壳程序。然后,就可以登录任何帐户并设置 Key3 了。
-
User Shell。最后一个组件是用户或系统应用程序,它将是辅助外壳程序。不应当将辅助外壳程序组件设置为外壳程序组件,或者将其与其他外壳程序组件组合在一起。而是应该像对待任何其他应用程序组件(例如,Windows Accessories 或传输控制协议/Internet 协议 (TCP/IP) 实用工具)一样对待辅助外壳程序组件。在 FBA 完成之后,可以登录用户帐户并且将 Key3 设置为指向应用程序。如果应用程序组件丢失,则将显示默认的管理员外壳程序组件。
-
其他组件。可以包含 Windows 脚本引擎和注册表编辑器以帮助创建 Key3。可以创建自定义应用程序以执行该任务。
设置 Key1
必须设置 Key1。在位于配置顶部的 Extra Registry Data 中,如前所述添加 Key1,并且设置 USR:Software/Microsoft/Windows NT/CurrentVersion/Winlogon 的值。要查看 Extra Registry Data 资源,可能必须采用以下方法启用资源:单击 View,指向 Resources,然后单击 Target Designer。
在设置、生成配置并将其下载到目标并且 FBA 过程完成之后,最后的步骤是为系统外壳程序设置用户帐户。因为最初将映像设置为在管理员外壳程序中启动,所以您应当能够访问注册表。
设置 Key3
要用唯一的外壳程序设置用户帐户,必须登录该用户帐户,并且添加 Key3 以设置系统应用程序的路径。请注意,无法登录管理员帐户以更改用户帐户的外壳程序。在登录用户帐户之后,可以使用 Regedit.exe、Windows 脚本或其他应用程序来创建 Key3 并设置应用程序的路径。
下面是一个 WScript 示例。
'Windows Script to set a user shell
set shell = CreateObject("WScript.shell")
shellpath = InputBox ("Enter the path and name of the EXE application
to be this user's shell. Example: c:/windows/system32/cmd.exe:")
if shellpath <> "" then Shell.RegWrite
"HKCU/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Shell", shellpath, "REG_SZ"
下面是一个 CScript 示例。
'Windows Script to set a user shell
set shell = CreateObject("WScript.shell")
wscript.stdout.WriteLine "Change the Shell for this user."
wscript.stdout.WriteLine
ChangeReg
sub ChangeReg
wscript.stdout.WriteLine "Enter the path and name of the EXE application to be this user's shell."
wscript.stdout.WriteLine "Example: c:/windows/system32/cmd.exe or type QUIT to exit: "
if wscript.stdin.AtEndOfStream then exit sub
shellpath = wscript.stdin.ReadLine
if ucase(shellpath) = "QUIT" then exit sub
Shell.RegWrite "HKCU/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Shell", shellpath, "REG_SZ"
wscript.stdout.WriteLine "User will now have a new shell"
wscript.stdout.WriteLine
end sub
在设置 Key3 之后,可以注销并重新登录用户帐户和/或管理员帐户。当您登录用户帐户时,用户帐户的特定外壳程序将启动。当您登录管理员帐户时,默认/管理员外壳程序将启动。
附注
默认情况下,针对 WScript 设置 Windows 脚本引擎。WScript 使用对话框来显示输入和输出消息。CScript 只使用命令提示,这对于无头系统是理想的。只能从管理员帐户更改到 CScript。如果您决定使用 Windows 脚本引擎,则必须为 Microsoft Visual Basic® Scripting Edition (VBScript) 文件修改 Windows 脚本引擎组件的注册表数据。更改 HKEY_CLASSES_ROOT/VBSFile/Shell/Open/Command 并将 %1 添加到值 %11%/WScript.exe 的结尾,如图 1 所示。
在创建 Key3 之后,可以重新登录用户帐户并查看帐户的新外壳程序。当您登录管理员帐户时,默认的或管理员外壳程序仍将启动。
如果您使用的是远程管理功能,请注意 Telnet 允许一个以上的用户登录同一计算机,但是远程桌面连接或 Microsoft NetMeeting® 只允许一个用户登录计算机。远程桌面连接获得对桌面的控制并且将用户从系统中注销。如果您打算使用远程桌面连接,则您的系统不得受到管理员登录和用户帐户注销的影响。
此外,在设置 Key3 之后,可以使用 FBreseal(包含在 Cloning 组件中)重封映像以便进行复制。用户帐户的注册表项信息将被保留。
小结
Windows XP Embedded 提供了一种灵活的方式,以便将流行的 Windows XP 操作系统部署到许多嵌入式设备中。由于能够具有两个带有不同外壳程序的帐户,因此 OEM 能够生成可防止用户意外访问管理功能的系统。解决方案是将管理外壳程序定义为系统中的默认外壳程序,并且更改用户帐户的注册表项以指向辅助外壳程序。