本文來自:http://www.microsoft.com/china/MSDN/library/mobility/embedded/EDGvirtu.mspx?mfr=true
摘要:
能夠使應用程式成為外殼程式是 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 或傳輸控制通訊協定/網際網路通訊協定 (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 shellset 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 shellset shell = CreateObject("WScript.shell")wscript.stdout.WriteLine "Change the Shell for this user."wscript.stdout.WriteLineChangeRegsub ChangeRegwscript.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 subshellpath = wscript.stdin.ReadLineif ucase(shellpath) = "QUIT" then exit subShell.RegWrite "HKCU/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Shell", shellpath, "REG_SZ"wscript.stdout.WriteLine "User will now have a new shell"wscript.stdout.WriteLineend 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 所示。
圖
1.
更改
Windows
指令碼引擎組件的註冊表值
在建立 Key3 之後,可以重新登入使用者帳戶並查看帳戶的新外殼程式。當您登入系統管理員帳戶時,預設的或管理員外殼程式仍將啟動。
如果您使用的是遠端管理功能,請注意 Telnet 允許一個以上的使用者登入同一電腦,但是遠端桌面連線或 Microsoft NetMeeting 只允許一個使用者登入電腦。遠端桌面連線獲得對案頭的控制並且將使用者從系統中登出。如果您打算使用遠端桌面連線,則您的系統不得受到管理員登入和使用者帳戶登出的影響。
此外,在設定 Key3 之後,可以使用 FBreseal(包含在 Cloning 組件中)重封映像以便進行複製。使用者帳戶的登錄機碼資訊將被保留。
返回頁首 小結
Windows XP Embedded 提供了一種靈活的方式,以便將流行的 Windows XP 作業系統部署到許多嵌入式裝置中。由於能夠具有兩個帶有不同外殼程式的帳戶,因此 OEM 能夠產生可防止使用者意外訪問管理功能的系統。解決方案是將管理外殼程式定義為系統中的預設外殼程式,並且更改使用者帳戶的登錄機碼以指向輔助外殼程式。