分享
 
 
 

Windows Vista Developer Story:应用程式相容性集錦

王朝system·作者佚名  2007-04-27
窄屏简体版  字體: |||超大  

Windows Vista Developer Story:應用程式相容性集錦

操作系統版本檢測

功能影響力

簡要說明

Windows Vista 的內部版本號是 6。現在在查詢時 GetVersion 函數會將此版本號返回給應用程式。

注意 這是繼 Windows XP(5.x 版本)後又一主要版本號。

表現

如下所述,此版本變更的表現極具應用程式特定性:

? 任何專門檢查 OS 版本的應用程式都將獲得更高的版本號。

? 應用程式安裝程式可能會阻止其自身安裝應用程式,而應用程式可能會阻止其自身啟動。

? 應用程式可能會警告用戶並繼續正常執行。

? 有些應用程式可能會變得不穩定或崩潰。

緩解

大多數應用程式會在 Windows Vista 上正常執行,因為 Windows Vista 的應用程式相容性非常高。但是,對於檢查 OS 版本的應用程式和安裝程式,在 Windows Vista 中提供了「相容性」模式。

用戶可以右鍵單擊快捷方式或 EXE,然後應用「相容性」選項卡中的 Windows XP SP2 相容性模式。大多數情況下,這樣做應該可以使應用程式如同在 Windows XP 上一樣工作,而無需對應用程式做任何更改。

補救措施

? 通常情況下,應用程式並不需要執行 OS 版本檢查,或者至少始終接受 OS 的版本 6 或更高版本。除非特定的法律、商業或系統組件要求進行版本檢查,否則均應執行上述行為。

? 應用程式的安裝程式不應使用 16 位安裝程式,以確保 64 位系統相容性。

? 確保應用程式使用的任何驅動程式都盡可能為用戶模式驅動程式,以維護多平台(32 位和 64 位)的相容性。

用戶帳戶控制

功能影響力

簡要說明

提高 Windows 安全性的一個基本步驟就是讓交互用戶使用標準用戶帳戶執行,從而使他們只能使用有限的一組權限。預設情況下,即使以管理員組成員身份登錄,Windows Vista 也會以標準用戶來執行每個應用程式。相反,如果用戶試圖啟動那些已標記需要管理員權限的應用程式,系統將會明確要求他們確認使用意圖。只有以管理員權限執行的應用程式才可以修改系統、全局設置和行為。Windows Vista 的這一功能就是用戶帳戶控制 (UAC)。

表現

? 無法檢測到和提升自定義安裝程式、卸載程式和更新程式從而以管理員身份執行。

? 執行任務時需要管理權限的標準用戶應用程式失敗,或者未將該任務提供給標準用戶。

? 嘗試執行當前用戶不具有必需權限的任務的應用程式可能會失敗。失敗的表現形式取決於應用程式的編寫方式。

? 執行管理任務和進行全局更改的控制面板應用程式可能執行不正常和失敗。

? 執行時使用 RunDLL32.EXE 的 DLL 應用程式在執行全局操作時可能執行不正常。

? 寫入全局位置的標準用戶應用程式將通過虛擬化被重定向到每個用戶的位置。

補救措施

用於自定義安裝程式的快速解決方案:

? 用戶可通過右鍵單擊並選取「以管理員身份執行該程式」來啟動安裝程式或更新程式。

? 可通過應用一個應用程式相容性修復程式來指示特定安裝程式需要提升。為此,右鍵單擊快捷方式或 EXE,然後從「相容性」選項卡應用 Windows XP SP2 相容性模式。

需要管理權限來執行系統修改或寫入權限區域的應用程式的快速解決方案:

? 公司用戶能夠應用應用程式相容性修復程式來指示傳統應用程式正確執行需要的管理員權限或特權。

? 減少某個受限檔案上存取控制列表 (ACL) 的限制可能會有助於試圖寫入這些檔案的應用程式。

? 檢查虛擬化檔案夾或註冊表項來查看應用程式是否正存取需要管理員特權的內容。該信息可用於將存取受管理員保護位置的要求從應用程式的未來版本中刪除。有關虛擬化檔案、檔案夾和位置的詳細信息,請參閱「鏈接」部分。

? 在獨立的 EXE 中封裝「執行 DLL 作為應用程式」DLL 調用並且為此 EXE 加入一份清單以使其要求提高的權限。

相容性測試:

? 任何安裝、卸載或更新情況都應提示用戶許可或出示憑據。一旦獲得用戶批准,操作即會成功。

? 以內置管理員身份嘗試重現失敗的情況。如果該方案通過,故障可能是由於缺乏權限造成的。

? 使用 Application Compatibility Toolkit 的 Compatibility Administrator「用戶帳戶控制」預測器工具來識別正在執行管理員操作的應用程式的那些區域。

利用 Windows Vista 功能解決方案:

? 基於 Windows Vista 的應用程式需要:

? 遵循 Windows Vista LOGO 程式中的指導原則和用戶體驗 (UX) 指導原則文檔。

? 使用內嵌的清單來表示特定的 requestedExecutionLevel。

? 將所有管理和非管理功能分離到單獨的 EXE 中。所有需要更高權限的功能都應位於獨立的用清單表示執行級的可執行的 EXE 中或使用管理權限執行的 COM 對像中。僅在需要時啟動管理任務。這適用於所有應用程式。

? 對於那些本來就不需要特殊管理的應用程式,要修改代碼來消除對管理員權限或特權的需要。

? 對於僅由管理員使用的應用程式,將該應用程式作標記以便能夠使用管理員權限或特權執行它。

? 當更新應用程式時,應使用獨立的更新程式 EXE 來更新目標應用程式。

? 控制面板應用程式必須從 .cpl 檔案移到 .exe 檔案,然後為基於 EXE 的控制面板應用程式加入一份清單,該清單指定所需的執行級。

? 在需要提升的 RunDLL32.EXE 下執行的 DLL 應修改為一個可執行並具有在清單內顯示的執行級的 EXE。

? 如果可能,總是用只讀存取權限打開檔案和註冊表項。僅在需要時使用讀寫存取權限,或在相應操作完成後就將權限恢復為只讀。

用戶帳戶控制 - 應用程式更新指導原則

功能影響

媒體

簡要說明

許多現有的應用程式有將更新功能集成到它們的應用程式中的傾向。嵌入更新功能的目的是為了確保客戶端執行 ISV 可以提供的最新二進制。

現已發現,許多應用程式在執行更新功能時,需要比「標準」用戶更多的權限。通常,需要執行在安裝時安裝的基於電腦的檔案。按照執行和安裝應用程式的 UAC 模式,只有 Admin 批准模式 Admin 中提升的管理員才有足夠的權限執行這些操作。

Windows Vista Installer Detection 試探法能夠正確地檢測出許多應用程式的更新程式,並且適當地提升更新程式,從而成功地完成提升。然而,仍然有一些無法成功更新應用程式的領域。例如:

? 未經過安裝檢測的進程外更新程式 — 未通過安裝檢測試探法檢測的更新程式。

? 多用途可執行程式/進程內更新 — 需執行多次操作的重載可執行程式。例如,二進制既是主要應用程式又是更新應用程式,或者多用途可執行程式在應用程式內作為執行緒執行。

表現

應用程式更新功能失敗

補救措施

未經過安裝檢測的進程外更新程式

? 這是一個任何企業都可能出現的問題,並且可能導致企業需要使用「管理員」權限來執行應用程式的結果。如果應用程式使用未經過安裝程式檢測的單個進程更新自己,那麼該單個進程將用 App Fix 標記為需要「管理員」權限。

? 以用戶身份無效的更新程式將禁止企業使用最低權限執行。

? 更新程式應使用要求的「管理員」執行級別被寫為單獨的進程。

? 僅在有必要用於更新用途時,該進程才執行。檢測要更新的程式,以確定其是否應作為用戶處理。

多用途可執行程式/進程內更新

在 Vista 上,沒有好方法來創建執行更新的多用途可執行程式,因為您無法切換執行程式的執行狀態。因而,執行程式將不得不一直作為「管理員」來執行。這時,應用程式應遵循以下其中一種方法來執行更新。

? 利用 MSI 中的「修補」技術(Windows Installer、InsallShield、Wise 等的最新版本支援該功能)。

? MSI 是一項主要的安裝程式技術,因為它為用戶提供管理更新的功能。

? 使用 MSI 來創建初始安裝程式並在 MsiPatchCertificate 表內嵌入證書。

? 為應用程式創建更新並用先前指定的證書籤署它。

? 在應用修補程式時,MSI 將為應用程式執行提升。

注意 這種方法勝過其他方法的主要優勢在於,它使用「標準用戶」工作,並可保證遊戲的安全性。它提供了更好的用戶體驗,因為「標準用戶」帳戶不必向「管理員」申請就可安裝修補程式或要求永久「管理員」權限來玩遊戲。

? 使用其他自定義安裝程式機制。

? 不鼓勵在企業環境下使用它,因為這將禁止用戶作為「非管理員」執行。

? 更新程式應使用要求的「管理員」執行級別被寫為單獨的進程。

注意 僅在有必要用於更新用途時,該進程才執行。檢測要更新的程式,以確定其是否應作為用戶處理。

? 作為「標準用戶」應用程式執行時進行更新。

? 當使用 ClickOnce 技術時,可作為「標準用戶」進行更新。這也是一個安裝平台,可允許用戶在其中部署應用程式並為應用程式編寫器處理更新。

Windows 資源保護 (WRP)

功能影響

高(阻止安裝或執行應用程式)

簡要說明

作為增加系統穩定性、預測性和可靠性的方案,Windows 資源保護 (WRP) 專用於保護處於只讀狀態下的 Windows 系統。這將影響特定的檔案、檔案夾和註冊表項。受保護資源的更新將被限制在 OS 所信任的安裝程式(例如 Windows Servicin)。這能夠使 OS 隨附的組件和應用程式受到更好的保護,使其免受其他應用程式和管理員的影響。

表現

應用程式和管理員將無法成功替換或修改受保護的 OS 資源,隨之會帶來以下結果:

? 應用程式安裝程式嘗試替換、修改或者刪除受 WRP 保護的 OS 檔案和/或註冊表項時可能會失敗,並得到一條錯誤訊息表明無法更新資源。這是因為對這些資源的存取被拒絕。

? 應用程式嘗試將新的註冊表項或值寫入受保護的註冊表項時可能會失敗,並得到一條錯誤訊息表明由於存取被拒絕而導致更改失敗。

? 應用程式如果依賴一些註冊表項或值,則其嘗試寫入受保護資源時可能會失敗。

受保護的系統區域示例:

? WRP 會保護大部分基於 Windows 的可執行檔案。預設情況下,下列副檔名代表 WRP 保護的檔案:

? .acm、.ade、.adp、.app、.asa、.asp、.aspx、.ax

? .bas、.bat、.bin

? .cer、.chm、.clb、.cmd、.cnt、.cnv、.com、.cpl、.cpx、.crt、.csh

? .dll、.drv、.dtd

? .exe、.fxp、.grp

? .h1s、.hlp、.hta

? .ime、.inf、.ins、.isp、.its

? .js、.jse、.ksh、.lnk

? .mad、.maf、.mag、.mam、.man、.maq、.mar、.mas、.mat、.mau、.mav、.maw、.mda、.mdb、.mde、.mdt、.mdw、.mdz、.msc、.msi、.msp、.mst、.mui

? .nls、.ocx、.ops

? .pal、.pcd、.pif、.prf、.prg、.pst

? .reg、.scf、.scr、.sct、.shb、.shs、.sys

? .tlb、.tsp、.url

? .vb、.vbe、.vbs、.vsmacros、.vss、.vst、.vsw

? .ws、.wsc、.wsf、.wsh

? .xsd、.xsl

? 預設情況下,受保護的註冊表項包括大部分 COM OS 註冊表項,例如:

? HKEY_CLASSES_ROOT\Interface\{GUID}

? HKEY_CLASSES_ROOT\Interface\{GUID}\NumMethods

? HKEY_CLASSES_ROOT\Interface\{GUID}\ProxyStubClsid

? HKEY_CLASSES_ROOT\Interface\{GUID}\ProxyStubClsid32

? 有極少一部分檔案夾受 WRP 的保護。這些是 OS 資源專用的檔案夾(例如一些 inetpub 檔案夾),如:

? $(runtime.bootDrive)\inetpub\uddi\webroot\details\

? runtime.bootDrive)\inetpub\uddi\webroot\edit\

? (runtime.bootDrive)\inetpub\uddi\webroot\controls\

? $(runtime.bootDrive)\inetpub\uddi\bootstrap\

緩解

重要信息 如果應用程式被識別為是基於 Windows Vista 的應用程式,則不會應用下列緩解。

對於眾所周知的安裝程式,在以下條件下將不會顯示「拒絕存取」錯誤:

? 當應用程式安裝程式被檢測為傳統安裝程式(即,該安裝程式不具有清單)時。

? 由於應用程式嘗試創建或修改 WRP 資源而出現「拒絕存取」錯誤時。

? 某些情況下,在嘗試刪除受 WRP 保護的資源時會自動提供緩解。

? 如果應用程式嘗試在 WRP COM 註冊表項下創建新的子項或值,則可能會收到「拒絕存取」錯誤。

注意 在這種情況下,儘管未將更改應用於 WRP 資源,還是會返回成功提示。

補救措施

? 除非使用 Microsoft 提供適用於 Windows Vista 的可再分發軟體包,否則不要在 Windows Vista 上安裝或者更新系統組件。

? 不要安裝 Microsoft 提供適用於 Windows Vista 的、完整的可再分發軟體包的單個組件。

? 使用 SfcIsFileProtected 檢測 WRP 保護的檔案。如果某個檔案在 WRP 下,則應用程式不應安裝或修改該檔案。

? 對於受 WRP 保護的註冊表項,應用程式應完好地處理由於 WRP 引起的「拒絕存取」訊息。

? 通過安裝相應的應用程式,測試和驗證依賴 WRP 緩解的傳統應用程式工作正常。

Internet Explorer 保護模式

功能影響力

簡要說明

在 Windows Vista 中,Microsoft Internet Explorer 7 以「保護模式」執行,該模式通過以限制嚴格的權限執行 Internet Explorer 進程,保護用戶免受攻擊。「保護模式」顯著降低了寫入、更改或破壞用戶電腦上資料或者安裝惡意代碼的攻擊能力。它有助於保護用戶,避免惡意代碼未經授權便自行安裝。此模式是安裝 Windows Vista 時用於 Internet Explorer 的預設模式。

表現

? 在 Internet 或 Intranet 區域中時,使用 Internet Explorer 7 的應用程式將不能直接寫入磁碟。

? 應用程式可能不知道如何處理新的提示。

「保護模式」建立於新的完整性機制之上,以將寫存取限制在可保安全的對象(如,具有更高完整性級別的進程、檔案和註冊表項)。當以「保護模式」執行時,Internet Explorer 是一個低完整性進程;因此它無法獲得對用戶配置檔案或者系統位置中檔案和註冊表項的寫入存取權限。

完整性低的進程只能對那些已分配了低完整性強制標籤的檔案夾、檔案和註冊表項執行寫入操作。結果,Internet Explorer 及其擴展在「保護模式」中執行,從而只能對低完整性位置(如新的低完整性「臨時 Internet 檔案」檔案夾、「歷史記錄」檔案夾、Cookies 檔案夾、「收藏夾」檔案夾以及「Windows 臨時檔案」檔案夾)進行寫入操作。

而且,在 Windows Vista 交付時,「保護模式」進程將以低桌面完整性級別執行,這樣可防止其將特定的窗口訊息發送給完整性更高的進程。

通過防止對用戶系統敏感區域進行未授權的存取,「保護模式」可限制由受損 Internet Explorer 進程或惡意軟體造成的損失程度。例如,攻擊者無法悄無聲息地將擊鍵記錄程式安裝到用戶的 Startup 檔案夾。同樣,受損的進程不能通過窗口訊息操作桌面上的應用程式。

當然,這些防範措施同時也限制了對更高完整性位置 (IL) 的合法更改。因此,「保護模式」提供了可減少對現有擴展影響力的相容性體系結構,如下圖所示。

圖 1

圖 1

相容性層處理許多現有擴展的需要。它截取了對中等完整性資源(如用戶配置檔案中的「我的文檔」檔案夾和 HKEY_CURRENT_USER 註冊表配置單元)的寫入嘗試。相容性層使用普通的 Windows 相容性修復程式將這些操作自動重新定向到下列低完整性位置:

? %userprofile%\LocalSettings\Temporary Internet Files\Virtualized

? HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\InternetRegistry

兩個更高權限的代理程式進程允許 Internet Explorer 和擴展執行經用戶許可的提升操作。例如,用戶權限代理程式 (IEUser.exe) 進程提供一組允許用戶將檔案保存到低完整性區域之外區域的功能。另外,管理員權限代理程式 (IEInstal.exe) 進程支援 Internet Explorer 安裝 ActiveX 控件。

補救措施

快速解決方案:

? 將相關站點添加到受信站點列表中。

? 關閉「保護模式」(不建議使用)。

相容性測試:

? 應用快速解決方案並確保應用程式能夠如同在 Windows XP SP2 中那樣執行這些從屬功能。

利用 Windows Vista 功能解決方案:

? 更改應用程式以處理保護模式,包括任何可能顯示的相關提示。

64 位 Windows Vista

功能影響力

簡要說明

Windows Vista 完全支援 AMD 和 Intel 的 64 位體系結構處理器。64 位版本的 Windows Vista 能夠借助 WOW64 仿真器執行所有 32 位的應用程式。然而,核心不支援 16 位應用程式、16 位安裝程式和 32 位核心模式驅動程式。

所有 64 位驅動程式必須經過數字簽名才可用於 Windows Vista 64 位版本。未簽名的驅動程式不受支援,而且也無法在 64 位 Windows Vista 上安裝。在安裝期間和驅動程式加載期間均會執行數字簽名檢查。

表現

? 在 64 位版本的 Windows Vista 上,使用 16 位可執行檔案、16 位安裝程式或 32 位核心驅動程式的應用程式和組件將無法啟動或不能正常執行。出現這種情況時,將顯示下列錯誤訊息:

該程式或功能「[exepath]\[app16bit].exe」無法啟動或執行,因為其與 64 位版本的 Windows 不相容。請與軟體供應商聯繫,詢問其是否有 64 位 Windows 相容版本。

? 啟動 16 位安裝程式或應用程式時,會顯示下列錯誤訊息:

此檔案的版本與您當前執行的 Windows 版本不相容。請檢查電腦的系統信息,查看您是需要 x86(32 位)還是 x64(64 位)程式版本,然後聯繫軟體發佈者。

? 32 位核心驅動程式將無法安裝到 64 位系統上。如果安裝者通過編輯註冊表手動添加驅動程式,系統將不能加載此應用程式,而且此操作會導致系統失敗。

? 64 位未簽名的驅動程式將無法安裝到 64 位系統上。如果安裝者通過編輯註冊表手動添加驅動程式,系統將不會在加載期間加載未簽名的驅動程式。

補救措施

利用 Windows Vista 功能解決方案:

? 應將所有 16 位組件從應用程式中刪除並用 32 位或 64 位的同等組件代替。

? 應將所有 16 位安裝程式轉換為 32 位或 64 位安裝程式。

? 如果應用程式使用核心模式驅動程式,那麼,需要編寫 64 位版本的驅動程式。應用程式應該檢測 OS(32 位或 64 位)的平台,然後基於 OS 平台安裝合適的驅動程式體系結構。

? 確保所有 64 位的驅動程式有數字簽名。

相容性測試:

? 在 32位和 64 位 Windows Vista 電腦上安裝並啟動應用程式。應用程式應該在這兩種體系結構上正常執行。

Microsoft 圖形識別和驗證 (GINA)

功能影響力

高(頻率:低)

簡要說明

在 Windows Vista 之前,要登錄到第三方服務器或使用第三方設備,ISV 必須替換 Windows XP 中的圖形識別和驗證 (GINA) 動態鏈接庫。這種應用程式還必須替換現有的 UI 並實現 Windows XP 上的智能卡和遠程桌面功能。

注意 如果應用程式不是以這種方式在 Windows XP 中執行,則此信息不適用。

Windows Vista 引入了一種新的身份驗證模式,使得 LogonUI 和 WinLogon 相互間能夠直接通信。該模式提供了 GINA 所不具備的簡單性、可伸縮性和靈活性。不同於 GINA 模式的是,ISV 不再需要替換登錄螢幕的 UI,這樣就緩解了其需要為用戶重新編寫用戶界面的負擔。ISV 能夠編寫憑據提供程式,後者是一個插入到 LogonUI 中的模塊,用來描述 UI 和收集憑據並將其傳遞給 WinLogon。憑據提供程式對於 WinLogon 完全透明。

憑據提供程式也是附加的,也就是說,用戶可安裝多個憑據提供程式,然後從中選擇想要使用的那一個。憑據提供程式可由用戶進行選擇和/或由事件來驅動。多個憑據提供程式可同時存在於 Windows Vista 上,而且不局限於第三方。事實上,Windows 將附帶兩個現成的憑據提供程式:用戶名和密碼憑據提供程式和智能卡憑據提供程式。

另外,憑據提供程式可在 CredUI 中重複使用。也就是說,在 LogonUI 上用於描述和收集憑據信息的同一對象可用於在 CredUI 方案中收集完全相同的憑據。

Windows XP 和 Windows Server 2003 上的 GINA 功能不受 Windows Vista 支援,並已從中刪除。應用程式的 GINA 模塊將不能起作用,而必須使用 Windows Vista 的新身份驗證模式重新進行編寫。

表現

? 用戶將不能成功安裝自定義登錄應用程式。

? 用戶將不能在 Windows Vista 中使用自定義登錄應用程式(使用 Windows XP 技術)登錄。這些可能包括:

? 生物尺度設備。

? 用於登錄的自定義 UI。

? 遠程用戶使用自定義登錄 UI 登錄的虛擬專用網路 (VPN) 解決方案。

補救措施

利用 Windows Vista 功能解決方案:

? 需要重新編寫使用 GINA 技術的應用程式或組件,以使用 Windows Vista 的新的登錄身份驗證模型。

會話 0 隔離

功能影響力

高(頻率:低)

簡要說明

在 Windows XP、Windows Server 2003 和更早期的 Windows 操作系統版本中,所有服務都在與第一個登錄到控制台的用戶相同的會話中執行。此會話稱為「會話 0」。在「會話 0」中一起執行服務和用戶應用程式會產生安全風險,因為這些服務以提升的權限執行,因此會成為那些正在伺機提升自身權限級別的惡意代理的目標。

通過隔離「會話 0」中的服務並使「會話 0」成為非交互式,Microsoft Windows Vista 操作系統降低了這種安全風險。在 Windows Vista 中,僅系統進程和服務在「會話 0」中執行。首位用戶將登錄到「會話 1」,隨後的用戶將登錄到隨後的會話。這意味著服務將永遠不會在與用戶應用程式相同的會話中執行,因此可防止源於應用程式代碼的攻擊。

受影響驅動程式類的具體示例包括:

? 印表機驅動程式,它由假脫機服務加載。

? 使用用戶模式驅動程式框架 (UMDF) 編寫的所有驅動程式,因為這些驅動程式由「會話 0」中的進程托管。

受此功能影響的應用程式類:

? 創建 UI 的服務。

? 試圖使用窗口訊息函數(例如 SendMessage 和 PostMessage)與應用程式通信的服務。

? 創建全局命名對象的應用程式。

表現

如果屬於應用程式的某個服務拋出一個 UI,則該應用程式將等待該服務,且在用戶會話中不會顯示此 UI。

補救措施

快速解決方案:

? 如果應用程式的服務使用一個 UI,Windows Vista 中的一個內置緩解將允許用戶在某個特定桌面中與「會話 0」UI 進行交互。這將使得特定於該應用程式的 UI 可用,而不是整個「會話 0」桌面。

? 如果應用程式創建全局命名對象,則請使用 Windows XP 相容性模式,以確保應用程式繼續使用「會話 0」服務。

相容性測試:

? 在「終端服務器」模式或快速用戶切換 (FUS) 模式下,在 Windows XP 上測試並驗證應用程式。如果在這些情況下該應用程式在 Windows XP 上執行正常,則其很可能能夠在 Windows Vista 下執行。

? 確定在應用 Windows XP 相容性模式(其包含對某些「會話 0」問題的緩解)後,應用程式執行正常。

? 在 Windows Vista 中測試驅動程式,確保其執行正常。如果執行不正常,則在啟用 FUS 並有多個用戶登錄的情況下在 Windows XP 中測試該驅動程式。如果對於第二個及隨後登錄的用戶而言,該驅動程式都執行正常,則可能不是受 Windows Vista 中「會話 0」更改的影響。此測試未檢測的唯一一類問題是,那些有關在 Windows Vista 的「會話 0」中缺少視訊驅動程式的問題。

利用 Windows Vista 功能解決方案:

? 使用客戶端或服務器機制,例如遠程過程調用 (RPC) 或命名管道,在服務和應用程式之間通信。

? 使用 WTSSendMessage 函數在用戶桌面上創建一個簡單的訊息框。這允許服務為用戶提供通知並請求簡單響應。

? 對於更複雜的 UI,請使用 CreateProcessAsUser 函數在用戶會話中創建一個進程。

? 對於服務提供的任何可用命名對像(例如事件或映射記憶體),請明確選擇 Local\ 或 Global\。

網路:TCP/IP 堆疊和 Windows 篩選平台

功能影響力

簡要說明

我們已完全重新編寫了 Windows Vista 網路堆疊。Windows Vista 實施了一個新的體系結構以代替 Windows XP 或 Windows Server 2003 中的雙重堆疊模型(為支援 IPv4 和 IPv6),借此擁有了支援多個 IP 層的一個傳輸和分畫格層。它有幾個新功能和協議增強功能。新堆疊完全模塊化、靈活且可擴展。儘管以往所有的嘗試都是為了保持與在各層與堆疊對接的現有應用程式的應用程式相容性,然而,仍有一些更改(主要是指改進的副作用)可能具有潛在的應用程式相容性問題,因此應用程式開發者必須仔細評估這些更改以瞭解其對其應用程式的影響。

Microsoft Windows 篩選平台 (WFP) API 允許開發者創建與篩選交互的代碼,該篩選發生在 Windows Vista 和代號為「Longhorn」的 Microsoft Windows Server 操作系統網路堆疊和整個操作系統的多個層中。WFP 基於應用程式的套接字 API 使用,還集成有並支援防火牆功能,例如經驗證的通信以及動態防火牆配置。

注意 WFP 本身不是防火牆。它是一組使防火牆得以實現的系統服務和 API。

在 Windows Vista 上不支援 TCP/IP 堆疊的下列元素:

? 防火牆鉤驅動程式功能和過濾器鉤驅動程式功能不受支援。

? R 系列工具,包括 rexec、rsh、finger 等。如果需要,可從 Services For Unix 組件中獲得這些工具。

? 網間分組交換 (IPX) 協議。IPX 不受支援,而且實際上很少使用。由於此更改產生的對應用程式相容性的影響應該沒有或是極小。

表現

? 如果構建用於 Windows XP 的應用程式僅使用公用的網路功能,則其在功能方面不應有任何削弱。應在 Windows Vista 上對其進行測試,以驗證其功能。

? 使用任何防火牆鉤驅動程式或過濾器鉤驅動程式功能的應用程式將不能執行。

? 依賴於 Microsoft 從未發佈的內部結構和函數調用的應用程式將失敗。

? 在核心模式下編寫的傳輸驅動程式接口 (TDI) 過濾器驅動程式可能在 OS 升級後不能正常執行。

注意 在將來的版本中會朝不支援 TDI 接口的方向發展。然而,這些驅動程式在 Windows Vista 上仍可執行。

補救措施

利用 Windows Vista 功能解決方案:

? WFP 為網路安全開發者提供了一組豐富的功能和服務,並提供了有關這些可用功能集的指南和文檔。

注意 現在,依賴 Services for Unix 和 R 系列的應用程式和腳本必須首先安裝這些工具。

網路:核心模式 IP 助手 API

功能影響力

簡要說明

在 Windows 的早期版本中,Winsock 客戶端不具有存取核心的 API 集。這一點在 Windows Vista 中將有變化。此外,在預設情況下,Windows Vista 現在還支援 IPv6。現在不是為 IPv4 和 IPv6 提供獨立的 API,而是設計了一個新助手 API 以提供涉及所有新技術的常用功能,如下所述:

? 在核心 (WSK) 客戶端中用於 Windows Sockets 的核心模式功能。

? IPv6 支援。

? 用於 IPv4 和 IPv6 尋址的單個功能集。

? 提供一致的、可擴展的對象模型。

? 提供基於網路服務接口的定義明確的安全模型。

? 公開新堆疊功能,例如隔間和子接口。

表現

使用較舊的助手 API 或未正式發佈的核心函數調用的應用程式將不能執行,且可能不穩定。

補救措施

? 應用程式需支援和實現新核心模式 IP 助手 API。

網路:IPv6

功能影響力

高(頻率:中)

簡要說明

預設情況下,Windows Vista 中的 TCP/IP 堆疊會啟用 IPv6。如果可用,將首選 IPv6 連接。對於掛接到 TCP/IP 堆疊的應用程式,有如下含義:

? 無論網路是否支援 IPv6,Windows Vista 堆疊都將發送 IPv6 通信。因此,預設情況下將生成路由器請求和鄰居發現訊息。

? 預設情況下,將顯示 IPv6 地址。可能會有多個 IPv6 地址與本地鏈接、全局鏈接、臨時鏈接或轉換技術(如 6to4、6over4、ISATAP 或 Teredo)相關聯。

注意 預設情況下將啟用 Teredo。

? Windows Vista 允許在僅 IPv6 模式下配置系統。在這種情況下,任何 IPv4 支援均不可用。

Windows Vista 中的 TCP/IP 堆疊支援強主機路由模型。這就意味著,從多宿主的電腦路由的封包不僅要基於目標地址,而且要基於封包的源地址。這個更改是必要的,因為在 IPv6 中,每個電腦獲取多個 IP 地址,在使用轉換技術的情況下,就考慮路由而言,主要以多宿主電腦的形式出現。為確保在這些場合中可以正確連接,網路堆疊必須實現強主機路由模型。

表現

使用 Windows XP TCP/IP 堆疊的應用程式和/或不知道 IPv6 協議的應用程式,將不會正常執行,可能會崩潰或創建不穩定的系統。

應用程式的強主機路由模型的含義如下:

? 從非循環地址連接到循環地址將失敗,反之亦然。

? 不允許通過網路中的 Windows Vista 電腦來發送源地址為 127.0.0.0/8 的封包。

補救措施

應用程式需要按如下要求重新編寫:

? 掛接到堆疊的所有應用程式都必須能夠處理 IPv6 通信。至少,在接收 IPv6 通信時不應崩潰。

? 任何依賴存在單個 IPv4 地址的應用程式都需要進行修改以處理多個 IPv6 地址。而且,任何選取首個地址的應用程式都可能需要更加仔細地識別要使用的 IPv6 地址。這是因為 IPv6 本地鏈接地址是不可路由的,因此,應用程式可能會不工作。相反,應用程式應使用允許按名稱進行連接的函數並自動選擇最適合的地址。

? 應用程式必須處理和支援僅 IPv6 的情況。

? 應用程式必須支援和實現強主機路由模型。

相容性風險

不支援使用的組件

以下 Windows 早期版本中的組件將不會出現在 Windows Vista 中:

? 核心模式印表機驅動程式支援:現在,所有印表機驅動程式都必須遵循用戶模式驅動程式框架。將阻止所有核心模式印表機驅動程式載入到 Windows Vista。有關詳細信息,請參閱 User-Mode Driver Framework (UMDF) 站點。

? Windows Vista 不支援使用 Windows 幫助(WinHelp.exe 和 WinHlp32.exe)。Beta 2 不支援 Windows 幫助,而一些 Windows 幫助代碼已從該版本中刪除。要在 Windows Vista 中查看具有 .HLP 檔案副檔名的幫助檔案,您需要從 Microsoft 下載中心下載並安裝 Windows 幫助。此下載對 Beta 2 或 RC1 不可用。有關詳細信息,請參閱幫助引擎支援。

注意 Windows Vista 將繼續支援 HTML Help 和 .CHM 檔案。

? Microsoft FrontPage 服務器擴展。現在,Windows SharePoint Services 為開發人員社區提供了增強的功能集。

? Macintosh 的服務。

? D3DRM。DirectX 將是 Windows Vista 唯一支援的圖形包。

? Web 發佈嚮導。

? NetDDE - 出於安全考慮,Windows Vista 不支援 NetDDE。(預設情況下,在 Windows XP SP 2 和 Windows Server 2003 上將禁用 NetDDE。)仍然支援常規 DDE。NetDDE 技術允許使用 DDE 傳輸的應用程式通過網路透明地進行資料交換。結果將是應用程式無法通過網路進行資料交換。要解決該問題,可使用一種不同的網路技術,例如,DCOM 或 Windows Communication Foundation。有關 NetDDE 的詳細信息,請參閱 http://support.microsoft.com/default.aspx?scid=kb;en-us;125703。

幫助和支援中心

幫助和支援中心 (HelpCtr.exe) 是專用於 Windows XP 和 Windows Server 2003 的幫助應用程式。幫助和支援中心顯示已編譯的具有 .CHM 檔案副檔名的幫助檔案。

幫助和支援中心未包含在 Windows Vista 中,其功能不被支援。如上所述,已編譯的具有 .CHM 檔案副檔名的幫助檔案只在 HTML 幫助應用程式中顯示。

幫助平台客戶端

幫助平台客戶端 (HelpPane.exe) 是一個專為 Windows Vista 設計的新幫助引擎。它與任何先前版本的 Windows 均不相容。要顯示具有 .H1S 檔案副檔名的幫助檔案,需要使用幫助平台客戶端。

在 Windows Vista 中,幫助平台客戶端可由 OEM、系統創建者、企業客戶在遵守許可協議的前提下進行自定義,但不能由第三方程式使用。有關自定義幫助平台客戶端的詳細信息,請參閱 Windows SDK。

Windows Vista 顯示器驅動程式模型 (VDDM)

Windows Vista 顯示器驅動程式模型 (VDDM) 是一個全新的顯示器驅動程式模型,它提高了 Windows 中顯示器驅動程式的穩定性。VDDM 中包含了許多主要功能,其中包括:

? 有效管理 DX 應用程式的視訊存儲器和新桌面窗口管理器 (DWM)。在 Windows Vista 中,多個 3D 應用程式將使用圖形處理器單元 (GPU)。

? 升級驅動程式無需重新啟動。

? 動態檢測 GPU 掛起,無需重新啟動即可進行恢復。

? 監視器的熱插拔檢測支援。

? 使用 DX9L 強制要求的硬體功能。

? 無故障視訊回放。

? 可進行非常安全的設計。

而 Windows 早期版本的大部分應用程式不應受 VDDM 影響,包括以下風險:

? DX 遊戲相容性,會導致 DX 執行時、IHV 驅動程式或核心圖形堆疊問題。

? 因更嚴格的 ACPI 要求而使用的移動功能(如快速鍵、克隆視圖、亮度和放大)。

? 可存取性,尤其是 Windows XP 設計的螢幕放大應用程式在 Windows Vista 上無效。

鏈接

通過電子郵件發送圖形反饋別名:lhgfxfb@microsoft.com

安全異常處理

在 Windows 早期版本中,IsBadReadPtr 和 IsBadWritePtr 函數用於驗證參數。現在,Windows Vista 上禁止使用這些函數。同樣,依賴於 Windows 組件(使用這些函數來驗證參數)的應用程式會發現 Windows 已不再使用它們。應用程式不應依賴於 Windows 進行任何參數驗證(將檢查 null,如果指針不正確,應用程式將失敗)。

安全異常處理 (SEH) 還將與不執行標記聯合使用。在對異常進行調度之前,將檢查異常處理程式是否被標記了 page_execute,同時還將檢查處理程式是否為有效代碼以及其是否在 SEH 表格中。

DLLmain 操作

在進程創建期間,DLL 的加載順序不能得到保證,不得依賴它來執行操作。由於新的 OS 組件依賴關係,DllMain 中的複雜處理可能會導致應用程式掛起或崩潰。有關詳細信息,請參閱 MSDN 上的以下頁面:

? Dllmain(英文)

? 「不應從 DllMain 完成對 OLE 對像調用」

? 「PRB:DLL 啟動期間無法創建 MFC 執行緒」

? 「使用 ODBC 或 DAO 或 DLLMain InitInstance 函數的 DLL 中時應用程式可能失敗出現一個 " AccessViolation " 錯誤信息」

? 「COM 應用程式從 DllMain 調用 CoCreateInstance 時掛起」

Outlook Express 已重命名

Outlook Express 已被更改和移動,現在稱為 Windows Mail。MAPI 應用程式需要知道這一更改。動態使用 MAPI 預設程式的大部分應用程式應該不會遇到任何相容性問題。

Shell:主題和我的文檔位置

Windows 資源管理器 Shell 已為 Windows Vista 引入了新的可視主題。Windows 早期版本中能夠處理主題的應用程式對新主題應該沒有相容性影響。

同時,「我的文檔」位置和結構在 Windows Vista 中已進行了更改以便提供更好的用戶體驗。用戶資料現存儲在 \users\%username%\ 檔案夾結構中。Pictures、Music、Documents、Desktop 和 Favorites 都是直接位於此結構下的新檔案夾。如果應用程式使用 ShGetFolderPath 函數並動態使用檔案夾路徑,則會自動將其重定向到新路徑和檔案位置。通常,應用程式不會察覺到因這些更改所造成的相容性影響。

快速用戶切換 (FUS)

所有版本的 Windows Vista 中現在均提供「快速用戶切換」(FUS),包括加入域的電腦。應用程式和安裝程式需知道 FUS,並能處理多個已登錄的用戶會話和終端服務器方案。有關詳細信息,請參閱 Microsoft Windows XP Fast User Switching:Design Guide for Building Business Applications(英文)。

CriticalSection 代碼更改

CriticalSection 代碼已做了更改,以提高安全性和可靠性。使用關鍵節鎖的應用程式:

? 應始終初始化關鍵節。

? 不應讀入非文檔式對象。讀入非文檔式結構以評估關鍵節狀態的應用程式在查找未初始化和釋放的關鍵節時很有可能會中斷。

? 應防止資源不足。在持有關鍵節鎖時調用 Sleep 的應用程式現可導致需要該鎖的其他執行緒出現資源不足情況。Sleep 調用應置於 LeaveCriticalSection 調用之後。

Windows Vista 中的程式相容性助手 (PCA) - 客戶準備文檔

PCA 簡介

附件中的「程式相容性嚮導」以及檔案屬性中的「相容性」選項卡是針對用戶的實用工具用以解決 Windows XP 中的相容性問題。這些工具的主要限制是發掘能力有限,且存在這樣一種事實,即用戶需要知道何時使用這些工具。程式相容性助手 (PCA) 作為 Windows Vista 中的新增功能,可以使得較早的有相容性問題的程式以自動化方式更好地執行。如果在用戶執行早期的程式後 PCA 檢測到已知的相容性問題,它將通知用戶並提供適用的解決方案,用戶下次執行程式前會生效。

注意 PCA 是針對客戶端的功能,服務器上不可用。

下列部分描述了用戶預期會遇到 PCA 的一些情況,用戶體驗的細節,適用於這些情況中的每一個的解決方案,如何在稍後管理由 PCA 執行的設置。最後一部分介紹了如何防止程式使用 PCA。

PCA 情況

檢測安裝失敗

對於 PCA 的主要情況之一便是檢測要安裝到 Windows Vista 上的程式發生安裝程式失敗的情況,並提供應用 Windows XP 相容性模式的解決方案。

最常見的安裝錯誤起因於安裝程式硬編碼對它們可執行的 Windows OS 版本的檢查。這些安裝程式通常失敗時返回這樣一條錯誤訊息,即,不支援當前 Windows 版本並終止。對此的進一步解釋是,程式通常使用 GetVersion 或 GetVersionEx API 來獲取它們正在其上執行的 Windows OS 版本。在 Windows Vista 中,這些 API 將返回 6 作為主要版本。如果程式被硬編碼來查找主要為版本 5 的 XP 版本,則它在 Windows Vista 中將失敗。Windows XP 相容性模式中包括的 XPVersionLie 修復程式會在程式調用 GetVersion 或 GetVersionEx API 時,為其提供 OS 的 XP 版本。

以下是一個示例錯誤訊息,來自用於鍵盤和滑鼠的 Microsoft Intellitype 軟體,發現其在 Windows 內部應用程式相容性測試期間,在 Windows Vista 中失敗,

圖 10

PCA 將檢測此情況並在安裝程式被終止後顯示類似於如下的用戶界面。

圖 11

如果用戶選擇選項來「使用推薦設置重新安裝」,Windows XP 相容性模式將應用於該安裝程式,安裝程式會自動重啟。

以下問答解釋了其中所發生情況的詳細信息:

? 檢測邏輯是什麼,PCA 如何知道安裝因版本問題失敗?

PCA 並不專門查找因版本問題引起的安裝失敗。PCA 使用的邏輯為,如果安裝未成功完成將進行檢測。它監視由 Windows Vista 視為安裝程式進行檢測的程式並檢查程式是否在「添加或刪除程式」(ARP) 中註冊條目。如果未在 ARP 中創建任何條目,則 PCA 斷定安裝未成功完成,並等待安裝程式終止,然後顯示 UI。

? PCA 如何獲取有關安裝程式的信息?

PCA 依靠 Windows Vista 中的「用戶存取控制」(UAC) 功能來瞭解是否程式被安裝。UAC 包括對安裝程式的檢測並將確保檢測的安裝程式以提升的權限執行(作為管理員)。這包括在啟動程式前獲取來自用戶的管理憑據或確認。

? PCA 對話框中每個與安裝有關的選項有何功能?

? 「使用推薦設置重新安裝」

這將應用 Windows XP 相容性模式並重新啟動程式。要獲取更多有關如何應用相容性模式的詳細信息,請參閱以下關於管理 PCA 設置的相關部分。

? 「程式已正確安裝」

可能在某些情況下,PCA 會提出已正確安裝但未在 ARP 中創建條目的安裝程式。這種情況下,客戶可以使用此選項。

? 「取消」

PCA 將不進行任何操作。

所有這些選項均會導致 PCA 對話框消失。對於同一安裝程式 PCA 將不會再次顯示,除非用戶在上一 PCA 對話框中選擇了「取消」選項。

在 UAC 下檢測程式失敗

對於 PCA 的第二種情況是,在「用戶存取控制」(UAC) 下執行的同時檢測程式故障。PCA 檢測到這一非較高權限的程式遇到故障且同時啟動了 child exe 這一特殊情況,因為它被檢測出是安裝程式且需要以很高的權限進行執行。嘗試啟動 updater.exe 的程式通常會遇到這種情況。如果同一 updater.exe 從資源管理器執行,則它會如預期的那樣以很高的權限進行執行,因為資源管理器知道如何啟動 UAC 許可 UI 並以很高的權限執行程式。

這種情況下,PCA 將應用 ELEVATECREATEPROCESS 相容性模式,使程式下次能夠以管理員的身份成功地啟動 child exe。下次程式嘗試啟動 child exe 時,用戶會看到 UAC 許可 UI 提供或確認管理員憑據。

以下為在此情況下顯示的 PCA 對話框的示例,由測試程式說明。

圖 12

此處,測試程式正在嘗試啟動更新程式,該程式需要以很高的權限進行執行且已失敗。這由 PCA 來檢測。現在,如果在程式下次執行時嘗試啟動更新程式,該程式將不會失敗並會以很高的權限成功執行。用戶會看到如下所示的 UAC 許可 UI。

圖 13

有關在後台發生的情況的更多詳細信息,將在下面的問答中進行解釋。

1.

檢測邏輯是什麼,PCA 如何知道程式在啟動需要以管理員身份執行的 child exe 時失敗?

對此種情況的檢測將通過 CreateProcess API 處的規範來完成,目的是檢測 child 進程啟動因需要以很高的權限執行而導致失敗這一情況。

2.

為什麼 PCA 對話框中不包含任何選項?

出於對此種情況中的問題檢測的高度信任,系統將自動應用解決方案(ELEVATECREATEPROCESS 相容性模式),用戶無需進行任何選擇。

程式啟動時告知用戶已知程式的相容性問題

除了以下列出的兩個執行時問題檢測情況外,PCA 還包括一種在程式啟動時提出具有相容性問題的程式列表這一情況。該列表將存儲在「系統」應用程式相容性資料庫中。此情況存在於 Windows XP 中,這些訊息被稱為「應用程式幫助」(也稱為 apphelp)訊息。

apphelp 訊息共有兩種類型。如果發現該程式不相容並且如果該程式可能對系統造成嚴重影響(例如,停止錯誤或安裝後無法啟動等),則將顯示如下所示的攔截訊息。

注意 Microsoft 已從 ISV 獲得了對被攔截程式的批准。

圖 14

另一類型的訊息為類似於如下內容的非攔截訊息。這將用於具有已知相容性問題但不會對系統造成嚴重影響的程式。

圖 15

這兩種情況下,「檢查解決方案」將發送一份 Windows 錯誤報告,以從 Microsoft 獲得線上響應。響應將顯示在客戶端的「問題的解決方案」(wercon.exe) UI 中。通常,響應將屬於以下 3 種類型:

? 有關該程式,將用戶指向 ISV 的更新。

? 有關詳細信息,將用戶指向 ISV 網站。

? 有關詳細信息,將用戶指向 Microsoft 知識庫文章。

由 PCA 進行的管理設置

通過使用鍵名 =「full path of the exe」,字符串值 =「name of the compatibility mode being applied」設置

「Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers」下面的註冊表項,將相容性模式應用於程式。

如果是安裝情況:

? 應用於安裝程式 .exe 的相容性模式名稱將是「WINXPSP2」。

? 設置 HKEY_LOCAL_MACHINE 下面的註冊表項,以應用對所有用戶有效的這一解決方案。

如果是 UAC 情況:

? 應用於程式 .exe 的相容性模式名稱將是「ELEVATECREATEPROCESS」。將設置 HKEY_CURRENT_USER 下面的註冊表項,該解決方案將只對當前用戶有效。

? 必須刪除這些註冊表項,才能刪除由 PCA 應用的相容性模式。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有