XP Embedded:不同的用户使用不同的外壳程序

 

摘要:

能够使应用程序成为外壳程序是 Windows XP Embedded 的关键功能之一。设备可以在自定义外壳程序而不是 Explorer 外壳程序中启动,这提供了两个好处。第一个好处是系统能够更快地启动。Explorer 外壳程序需要花费大量的时间来加载所有支持库和文件,而特定应用程序很可能需要加载较少的库。第二个好处是可以限制对设备的管理功能的访问,这完全取决于自定义外壳程序应用程序的编写方式。

限制用户对管理功能(例如,控制面板)的访问可能是好处,但存在一个小的缺点:管理员也会受到限制,除非管理员可以在不同的外壳程序中启动。

理想的解决方案是对 Windows XP Embedded 进行相应的设置,以便用户帐户可以在应用程序外壳程序中启动,而管理员帐户可以在管理外壳程序中启动。然后,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 所示。

shellsfig01

1. 更改 Windows 脚本引擎组件的注册表值

在创建 Key3 之后,可以重新登录用户帐户并查看帐户的新外壳程序。当您登录管理员帐户时,默认的或管理员外壳程序仍将启动。

如果您使用的是远程管理功能,请注意 Telnet 允许一个以上的用户登录同一计算机,但是远程桌面连接或 Microsoft NetMeeting® 只允许一个用户登录计算机。远程桌面连接获得对桌面的控制并且将用户从系统中注销。如果您打算使用远程桌面连接,则您的系统不得受到管理员登录和用户帐户注销的影响。

此外,在设置 Key3 之后,可以使用 FBreseal(包含在 Cloning 组件中)重封映像以便进行复制。用户帐户的注册表项信息将被保留。

返回页首

小结

Windows XP Embedded 提供了一种灵活的方式,以便将流行的 Windows XP 操作系统部署到许多嵌入式设备中。由于能够具有两个带有不同外壳程序的帐户,因此 OEM 能够生成可防止用户意外访问管理功能的系统。解决方案是将管理外壳程序定义为系统中的默认外壳程序,并且更改用户帐户的注册表项以指向辅助外壳程序。

 

 

 

 

转载于:https://www.cnblogs.com/huhu0013/archive/2012/05/18/2507600.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...

今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻。在这之前&#xff0c;我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情。在linux操作系统中&#xff0c;普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式。ELF(Exec…

u-boot环境变量设置

这是我uboot的环境变量设置&#xff0c;在该设置下可以运行initram内核&#xff08;从内存下载到nandflash再运行&#xff09;&#xff0c;但是运行nfs根文件系统的时候一直出错&#xff0c;各种错误。查看了很多资料后猜想应该是uboot传递给linux内核的参数有问题&#xff0c;…

RHEL6 下Cfengine V3 安装测试1

Cfengine 是一种 GNU 开源配置管理框架&#xff0c;用于计算机系统自动化。此框架是轻量的&#xff0c;可针对几乎所有平台构建。它能运行在所有常见平台上&#xff0c;其中包括 AIX、Linux、UNIX、Apple 和 Windows。 cf-promises 承诺的检验者和编译者&#xff0c;在试图执行…

linux下grpc安装编译,linux下安装grpc插件 (c++和go语言)

在debian/ubuntu系统下&#xff0c;需要做如下准备操作&#xff1a;$ [sudo] apt-getinstallbuild-essential autoconf libtoolpkg-config如果你想要从源码编译并且运行测试&#xff0c;同时运行下面的安装&#xff1a;$ [sudo] apt-getinstalllibgflags-dev libgtest-dev$ [su…

SIP资料汇总

SIP协议 SIP协议过程概念及分析 SIP入门开发之路(含SIP开发需要学习的资源及网址) SIP揭密&#xff08;中文版&#xff09; 使用Java的SIP Servlet进行SIP开发 Asterisk: Asterisk安装及测试 Asterisk十问十答 Asterisk入门教程 Asterisk介绍-Asterisk RealTime SIP asterisk配…

Nand Flash Yaffs系统大量写入数据失败问题的解决方法。

一个朋友的问题&#xff0c;我们共同分析后搞定。其实以前也遇到过同样问题&#xff0c;时间长了&#xff0c;没总结。 事发&#xff1a;在Nand Flash上使用2.6.14的linux kernel&#xff0c;三星2440的板子&#xff0c;连续写入文件&#xff0c;到一定大小限制就删除&#xff…

linux上的壁纸软件下载,Ubuntu 17.10上安装开源壁纸工具Wallch 4.0

在Ubuntu 17.04上安装WallchWallch是一款免费的开源通用壁纸更换器&#xff0c;用户可以在设置的时间更改桌面背景图片。它会在桌面上更改并显示随机图片或维基百科的当天图片。它还具有一个实时地球Living Earth壁纸&#xff0c;每30分钟更换桌面背景&#xff0c;以显示阳光和…

Asp.NET 获取网站根目录

http://www.cnblogs.com/Leo_wl/archive/2010/06/12/1757148.html转载于:https://www.cnblogs.com/imihiroblog/archive/2012/05/23/2514649.html

小议同步IO :fsync与fdatasync

对于提供事务支持的数据库&#xff0c;在事务提交时&#xff0c;都要确保事务日志&#xff08;包含该事务所有的修改操作以及一个提交记录&#xff09;完全写到硬盘上&#xff0c;才认定事务提交成功并返回给应用层。 一个简单的问题&#xff1a;在*nix操作系统上&#xff0c;怎…

linux c++ queue 多线程,C++多线程,消息队列用法

进程是没有活力的&#xff0c;它只是一个静态的概念。为了让进程完成一些工作&#xff0c;进程必须至少占有一个线程&#xff0c;所以线程是描述进程内的执行&#xff0c;正是线程负责执行包含在进程的地址空间中的代码。实际上&#xff0c;单个进程可以包含几个线程&#xff0…

获取磁盘类型

1. GetLogicalDriveStrings获取所以的分区字符串 2. GetDriveType("C:\\"); 对每个分区字符串分别调用GetDriveType获得分区所在磁盘的磁盘类型。 0 DRIVE_UNKNOWN未知的磁盘类型   1 DRIVE_NO_ROOT_DIR说明lpRootPathName是无效的   2 DRIVE_REM…

css3 (2)

Php1情景模拟&#xff1a;如果是在C盘&#xff0c;遇到熊猫&#xff0c;数据丢失。我们要重装系统&#xff0c;格C盘。我们要更改对应的访问的目录。需要改apache下面的配置文件Appserv 是集成环境包&#xff0c;里面也是apache服务器在运行网页请求。Apache目录下面有一个conf…

linux find显示文件的基本信息,命令find搜索文件,命令stat查看文件的详细信息

命令stat命令语法stat(选项)(参数)命令描述命令stat用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。命令选项-L&#xff1a;支持符号连接&#xff1b;-f&#xff1a;显示文件系统状态而非文件状态&#xff1b;-t&#xff1a;以简洁方式输出信息&#…

C# String.Format格式说明

C#格式化数值结果表 字符 说明 示例 输出 C货币string.Format("{0:C3}", 2)&#xff04;2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E0011.20E001G常规string.Format("{0:G}", 2)2N用分号隔开的数字string.Format("{0:N}…

Linux添加网站后无法显示,Linux:SElinux导致网站无法访问

通过更改SElinux状态可以判断出&#xff0c;当SElinux处于关闭状态时&#xff0c;网站内容访问正常。[rootmaster1-192-168-117-18 ~]# setenforce 0[rootmaster1-192-168-117-18 ~]# getenforcePermissive[rootmaster1-192-168-117-18 ~]# setenforce 1[rootmaster1-192-168-1…

Linux rpm 命令参数使用详解[介绍和应用]

RPM是RedHat Package Manager&#xff08;RedHat软件包管理工具&#xff09;类似Windows里面的“添加/删除程序” rpm 执行安装包 二进制包&#xff08;Binary&#xff09;以及源代码包&#xff08;Source&#xff09;两种。二进制包可以直接安装在计算机中&#xff0c;而源代…

VS快捷键和小功能

转自&#xff1a;http://www.cnblogs.com/wangshenhe/archive/2012/05/28/2521393.html备份一个 VS隐藏的快捷键和小功能 可将代码放入工具箱&#xff0c;类似控件使用。CtrlShiftV:剪贴板循环粘贴。CtrlT:变换一个字符&#xff0c;即将字符后移。CtrlShiftT:变换一个词&#x…

linux 分区 文件,Linux的分区与文件结构

Linux操作系统与我们经常使用的windows操作系统有所不同&#xff0c;Linux主机上的设备以及系统的分区都以文件的形式存在着。接下来就将Linux系统中设备以及分区的标识方法以及目录结构做以详细介绍。在Linux系统中主要以接口类型来区分不同的存储设备:IDE接口用hd来表示&…

CentOS卸载OpenJDK并安装Sun JDK

第一步&#xff1a;查看Linux自带的JDK是否已安装 &#xff08;卸载centOS已安装的1.4&#xff09; 安装好的CentOS会自带OpenJdk,用命令 java -version &#xff0c;会有下面的信息&#xff1a; java version "1.6.0" OpenJDK Runtime Environment (build 1.6.0-b09…

AndroidManifest.xml文件详解(uses-sdk)

语法&#xff08;SYNTAX&#xff09;&#xff1a; <uses-sdkandroid:minSdkVersion"integer" android:targetSdkVersion"integer" android:maxSdkVersion"integer"/> 被包含于&#xff08;CONTAINED IN&#xff09;&a…