封存:Windows 傳統型應用程式的認證需求 v1.1
檔版本: 1.1
檔日期: 2012 年 1 月 26 日
本檔包含傳統型應用程式必須符合的技術需求和資格資格,才能參與 Windows 8 傳統型應用程式認證計劃。 針對 Windows 7,此程式稱為 Windows 軟體標誌計劃。
歡迎使用!
Windows 平臺支援廣泛的產品和合作夥伴生態系統。 在您的產品上顯示 Windows 標誌代表 Microsoft 與公司之間質量的關聯性和共同承諾。 客戶信任產品上的 Windows 品牌,因為它可確保其符合相容性標準,並在 Windows 平台上表現良好。 成功傳遞 Windows 應用程式認證可讓 App 在 Windows 相容性中心展示,這也是在 Windows 市集中列出傳統型應用程式參考的必要步驟。
Windows 應用程式認證計畫是由程式和技術需求所組成,可協助確保攜帶 Windows 品牌的第三方應用程式在執行 Windows 的電腦上既容易安裝又可靠。 客戶在購買的系統中重視穩定性、相容性、可靠性、效能和品質。 Microsoft 著重於其投資,以符合設計為在適用於電腦之 Windows 平臺上執行的軟體應用程式需求。 這些工作包括相容性測試,以取得體驗的一致性、改善的效能,以及執行 Windows 軟體之電腦的增強安全性。 Microsoft 相容性測試已設計為與產業合作夥伴合作,並持續改善以因應產業開發和消費者需求。
Windows 應用程式認證套件可用來驗證這些需求的合規性,並取代用於 Windows 7 軟體標誌計劃中驗證的 WSLK。 Windows 應用程式認證套件是 Windows 軟體開發工具包 (SDK) 中包含的其中一個元件。
應用程式資格
若要讓應用程式符合 Windows 8 傳統型應用程式認證資格,它必須符合下列準則和本檔所列的所有技術需求。
- 它必須是獨立應用程式
- 它必須在本機 Windows 8.1 計算機上執行
- 它可以是經認證的 Windows Server 應用程式的用戶端元件
- 它必須是程式代碼和功能完成
1.應用程式相容且具有復原性
應用程式當機或停止回應時,會導致使用者感到非常沮喪。 應用程式應具有復原性和穩定性,並消除這類失敗有助於確保軟體更具可預測性、可維護性、高效能且值得信任。
- 1.1 您的應用程式不得相依於 Windows 相容性模式、AppHelp 訊息,或任何其他相容性修正
1.2 您的應用程式不得相依於 VB6 運行時間
1.3 您的應用程式不得載入任意 DLL,以使用 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows AppInit_dlls攔截 Win32 API 呼叫。
2.應用程式必須遵守 Windows 安全性最佳做法
使用 Windows 安全性最佳做法有助於避免暴露在 Windows 攻擊面上。 攻擊面是惡意攻擊者利用目標軟體中的弱點來利用操作系統的進入點。 最差的安全性弱點之一是提高許可權。
- 2.1 您的應用程式必須使用強式和適當的 ACL 來保護可執行檔 2.2 您的應用程式必須使用強式和適當的 ACL 來保護目錄 2.3 您的應用程式必須使用強式和適當的 ACL 來保護登錄機碼 2.4 您的應用程式必須使用強式和適當的 ACL 來保護包含物件 2.5 的應用程式必須減少對容易竄改 2.6 之服務的非系統管理員存取,您的應用程式必須防止使用快速的服務每隔 24 小時重新啟動兩次以上時重新啟動
Windows 應用程式認證計畫會藉由確認 ACL 和服務實作的方式不會讓 Windows 系統面臨風險,以確認不會公開 Windows 攻擊介面。
3. 應用程式支援 Windows 安全性功能
Windows 作業系統有許多支援系統安全性和隱私權的功能。 應用程式必須支援這些功能,才能維護操作系統的完整性。 編譯不當的應用程式可能會導致緩衝區滿溢,進而造成阻斷服務或允許惡意代碼執行。
- 3.1 您的應用程式不得使用 AllowPartiallyTrustedCallersAttribute (APTCA) 以確保對強名稱元件的存取安全
3.2 您的應用程式必須使用 /保管庫 SEH 旗標進行編譯,以確保安全的例外狀況處理
3.3 您的應用程式必須使用 /NXCOMPAT 旗標進行編譯,以防止數據執行
3.4 您的應用程式必須使用 /DYNAMICBASE 旗標來編譯位址空間配置隨機化 (ASLR)
3.5 您的應用程式不得讀取/寫入共用PE區段
4.應用程式必須遵守系統重新啟動管理員訊息
當使用者起始關機時,他們通常強烈想要看到關機成功;他們可能急於離開辦公室,只是希望他們的電腦關閉。 應用程式必須遵守此需求,不要封鎖關機。 雖然在大部分情況下,關機可能並不重要,但應用程式必須準備好進行重大關機的可能性。
- 4.1 您的應用程式必須適當地處理重大關機
- 在重大關機中,傳回 FALSE 至WM_QUERYENDSESSION的應用程式將會傳送WM_ENDSESSION並關閉,而回應WM_QUERYENDSESSION逾時的應用程式將會終止。
- 具有 LPARAM = ENDSESSION\_CLOSEAPP(0x1) 的 WM\_QUERYENDSESSION。
控制台應用程式可以呼叫 SetConsoleCtrlHandler 來指定將處理關機通知的函式。 服務應用程式可以呼叫 RegisterServiceCtrlHandlerEx 來指定將接收關機通知的函式。
- 具有 LPARAM = ENDSESSION\_CLOSEAPP(0x1) 的 WM\_ENDSESSION。
應用程式至少應該藉由儲存任何用戶數據來準備,並指出重新啟動後所需的資訊。
5.應用程式必須支援全新且可逆的安裝
全新、可逆的安裝可讓使用者在其系統上成功管理(部署和移除)應用程式。
- 5.1 您的應用程式必須正確實作全新且可逆的安裝
- DisplayName
- InstallLocation
- 發行者
- UninstallString
- VersionMajor 或 MajorVersion
- VersionMinor 或 MinorVersion
- 如果安裝失敗,應用程式應該能夠復原它,並將計算機還原為其先前的狀態。
- 重新啟動電腦不應該是安裝或更新結束時的唯一選項。 用戶應該有機會稍後重新啟動。
- Windows 清查工具和遙測工具需要已安裝應用程式的完整資訊。 如果您使用 MSI 型安裝程式,MSI 會自動建立下列登錄專案。 如果您不是使用 MSI 安裝程式,安裝模組必須在安裝期間建立下列登入專案:
6.應用程式必須以數位方式簽署檔案和驅動程式
Authenticode 數位簽名可讓用戶確定軟體是正版的。 它也允許人們偵測檔案是否遭到竄改,例如是否已感染病毒。 內核模式程式代碼簽署強制執行是一項稱為程式代碼完整性的 Windows 功能,可藉由在每次將檔案映射載記憶體時驗證檔案的完整性,來改善操作系統的安全性。 CI 會偵測惡意代碼是否已修改系統二進位檔。 當核心模組的簽章無法正確驗證時,也會產生診斷和系統稽核記錄事件。
- 6.1 所有可執行檔(.exe、.dll、.ocx、.sys、.cpl、.drv、.scr)都必須使用 Authenticode 憑證簽署
6.2 應用程式所安裝的所有核心模式驅動程式都必須透過 Windows 硬體認證計畫取得 Microsoft 簽章。 所有文件系統篩選驅動程式都必須由 Microsoft 簽署。
6.3 例外狀況和豁免
- 豁免將只考慮未經簽署的第三方可轉散發套件,不包括司機。 要求簽署版本的可轉散發套件的通訊證明必須獲得此豁免。
7. 應用程式不會根據作業系統版本檢查封鎖安裝或應用程式啟動
當沒有任何技術限制時,客戶不會人為地遭到封鎖,無法安裝或執行其應用程式。 一般而言,如果應用程式是針對 Windows Vista 或更新版本的 Windows 所撰寫,則不應該檢查操作系統版本。
- 7.1 您的應用程式不得執行版本檢查是否相等
- 以一個套件形式傳遞的應用程式也會在 Windows XP、Windows Vista 和 Windows 7 上執行,而且需要檢查操作系統版本,以判斷要安裝在指定操作系統上的元件。
- 僅使用已核准的 API 呼叫來檢查作業系統的最低版本的應用程式(僅在安裝期間,而非在運行時間期間),且會正確列出應用程式指令清單中的最低版本需求。
- 安全性應用程式(防病毒軟體、防火牆等),系統公用程式(例如重組、備份和診斷工具),僅使用核准的 API 呼叫來檢查操作系統版本。
- 如果您需要特定功能,請檢查功能本身是否可用。 如果您需要 Windows XP,請檢查 Windows XP 或更新版本 (>= 5.1)。 如此一來,您的偵測程式代碼將會繼續處理未來的 Windows 版本。 驅動程式安裝程式和卸載模組絕對不應該檢查作業系統版本。
8.應用程式不會以安全模式載入服務或驅動程式
保管庫 模式可讓用戶診斷和疑難解答 Windows。 驅動程式和服務不得設定為以安全模式載入,除非是儲存設備驅動器等基本系統作業所需的驅動程式,或基於診斷和復原目的,例如防病毒軟體掃描器。 根據預設,當 Windows 處於安全模式時,它只會啟動預安裝 Windows 的驅動程式和服務。
- 8.1 例外狀況和豁免
- 必須以安全模式啟動的司機和服務需要豁免。 豁免要求必須包含寫入 保管庫 Boot 登錄機碼的每個適用驅動程式或服務,並描述應用程式或服務必須以安全模式執行的技術原因。 應用程式安裝程式必須使用下列登錄機碼來註冊所有這類驅動程式和服務:
注意: 您必須測試這些驅動程式和服務,以確保它們以安全模式運作,而不會發生任何錯誤。
9.應用程式必須遵循用戶帳戶控制指導方針
某些 Windows 應用程式會在系統管理員帳戶的安全性內容中執行,而應用程式通常會要求過多的用戶權力和 Windows 許可權。 控制資源的存取權可讓使用者控制其系統,並防止其遭受不必要的變更。 不必要的變更可能是惡意的,例如 rootkit 控制電腦,或是由具有有限許可權的人員所做出動作的結果。 控制資源存取權的最重要規則是提供使用者執行其必要工作所需的最低存取標準用戶內容。 遵循用戶帳戶控制 (UAC) 指導方針可在應用程式需要時提供應用程式所需的許可權,而不會讓系統持續暴露在安全性風險下。 大部分的應用程式在運行時間不需要系統管理員許可權,而且應該以標準使用者身分正常執行。
- 9.1 您的應用程式必須有定義執行層級的指令清單,並告訴操作系統應用程式執行所需的許可權
- 管理員 執行層級設定為 highestAvailable 和/或 require 的系統工具 管理員 istrator
- 只有輔助功能或UI自動化架構應用程式會將uiAccess旗標設定為 true,以略過使用者介面許可權隔離 (UIPI)。 若要正確啟動應用程式使用率,此旗標必須經過 Authenticode 簽署,而且必須位於文件系統中的受保護位置,也就是 Program Files。
- 應用程式指令清單標記僅適用於 EXE,不適用於 DLL。 這是因為 UAC 不會在程式建立期間檢查 DLL。 值得注意的是,UAC 規則不適用於 Windows 服務。 指令清單可以是內嵌或外部。
若要建立指令清單,請建立名稱 <為 app_name.exe.manifest> 的檔案,並將它儲存在與 EXE 相同的目錄中。 請注意,如果應用程式有內部指令清單,則會忽略任何外部指令清單。 例如:
<requestedExecutionLevel level=“”asInvoker |highestAvailable |require 管理員 istrator“” uiAccess=“”true|false“”/>
- 任何系統管理功能都必須移至使用系統管理許可權執行的個別程式。 使用者面向的應用程式,例如透過 \[開始\] 功能表上的程式群組存取的應用程式,而且需要提高許可權必須經過 Authenticode 簽署。
- 執行其主要程式且具有更高許可權的應用程式需要豁免(需要 管理員 istrator 或 highestAvailable)。 主要進程會識別為應用程式的使用者進入點。 下列案例將考慮豁免:
10.應用程式預設必須安裝到正確的資料夾
用戶應該擁有一致且安全的檔案預設安裝位置體驗,同時維護在所選位置安裝應用程式的選項。 也必須將應用程式數據儲存在正確的位置,讓數個人使用同一部計算機,而不會損毀或覆寫彼此的數據和設定。 Windows 提供檔案系統中的特定位置來儲存程式和軟體元件、共用的應用程式數據和使用者專屬的應用程式數據
- 10.1 您的應用程式預設必須安裝在 Program Files 資料夾中
- 登錄會在Software\Microsoft\Windows\CurrentVersion 下執行機碼 HKLM 和 或 HKCU
- 登錄會在 Software\Wow6432Node\Microsoft\windows\CurrentVersion 下執行機碼 HKLM 和 或 HKCU
- \[開始\] 功能表 \[所有專案\] \[啟動\ > ]
- 針對 %ProgramFiles 中的原生 32 位和 64 位應用程式,針對在 x64 上執行的 32 位應用程式,以及 %ProgramFiles(x86)% 。 用戶資料或應用程式資料絕對不能儲存在此位置,因為為此資料夾設定的安全性許可權。
- 例如,您的應用程式不應該設定下列任一項:
- 使用正確的方法來安裝檔案,例如字型或驅動程式。
- 安裝應用程式時,沒有正確的使用者位置可儲存資料。 在安裝之後,應用程式嘗試修改計算機層級的默認關聯行為將會失敗。 相反地,每個用戶層級上必須宣告預設值,以防止多個使用者覆寫彼此的預設值。
- 寫入全域程式集緩存 (GAC) .NET 應用程式的應用程式需要豁免,除非明確需要共用元件,否則將元件相依性儲存在應用程式目錄中。
11.應用程式必須支援多用戶會話
Windows 使用者應該能夠執行並行會話,而不會發生衝突或中斷。
- 11.1 您的應用程式必須確保在本機或遠端多個會話中執行時,應用程式的一般功能不會受到負面影響
11.2 您的應用程式設定和數據檔不得跨使用者保存
11.3 用戶隱私權和喜好設定必須隔離至使用者的會話
11.4 您的應用程式實例必須彼此隔離
- 這表示應用程式的另一個實例看不到來自某個實例的用戶數據。 作用中用戶會話中的音效不應該在作用中用戶會話中聽到。 如果多個應用程式實例使用共用資源,應用程式必須確定沒有衝突。
- 請參閱UAC需求。
12.應用程式必須支援 x64 版本的 Windows
隨著 64 位硬體變得更常見,使用者預期應用程式開發人員會藉由將應用程式遷移至 64 位,或 32 位版本的應用程式在 64 位版本的 Windows 下執行良好,來利用 64 位架構的優點。
- 12.1 您的應用程式必須原生支援 64 位,或至少 32 位 Windows 應用程式必須在 64 位系統上順暢執行,以維持與 64 位版本的 Windows 相容性
12.2 您的應用程式及其安裝程式不得包含任何16位程式代碼或依賴任何16位元件
12.3 您的應用程式設定必須偵測並安裝64位架構的適當驅動程式和元件
12.4 任何殼層外掛程式都必須在64位版本的Windows上執行
12.5 在 WoW64 模擬器下執行的應用程式不應該嘗試顛覆或略過 Wow64 虛擬化機制
- 如果有特定案例需要偵測應用程式是否在 WoW64 模擬器下執行,則應該呼叫 IsWow64Process 來執行此動作。
推論
隨著這些需求的發展,我們將記下下列修訂歷程記錄中的變更。 穩定需求對於執行您的最佳工作至關重要,因此我們將致力於確保所做的變更是可持續的,並繼續保護和增強您的應用程式。
感謝您再次加入我們的承諾,以提供絕佳的客戶體驗。
修訂歷程記錄
Date | 版本 | 修訂描述 | 連結至檔 |
---|---|---|---|
2011年12月20日 | 1.0 | 預覽檔的初始草稿。 | |
2012年1月26日 | 1.1 | 更新至區段 #2。 | 1.1 |
深入瞭解傳統型應用程式認證
需求 | 描述 | 其他詳細資料 |
---|---|---|
相容性和復原能力 | 當機和停止回應是使用者的重大中斷,並造成挫折。 應用程式應具有復原性和穩定性,消除這類失敗有助於確保軟體更具可預測性、可維護性、高效能且可信任性。 | Windows Vista、Windows 7 和 Windows 8 操作系統 應用程式驗證器 AppInit DLL |
遵循 Windows 安全性 最佳做法 | 使用 Windows 安全性最佳做法有助於避免暴露在 Windows 攻擊面上。 攻擊面是惡意攻擊者利用目標軟體中的弱點來利用操作系統的進入點。 最差的安全性弱點之一是提高許可權。 | Attack Surface Analyzer 存取控制清單 |
支援 Windows 安全性 功能 | Windows 作業系統已實作許多支持系統安全性和隱私權的措施。 應用程式必須支持這些措施,才能維護OS的完整性。 編譯不當的應用程式可能會導致緩衝區滿溢,進而造成阻斷服務或執行惡意代碼。 | BinScope 工具參考 |
遵守系統重新啟動管理員訊息 | 當使用者起始關機時,在絕大多數情況下,他們強烈希望看到關機成功:他們可能急於離開辦公室,並「只是想要」他們的電腦關閉。 應用程式必須遵守此需求,不要封鎖關機。 雖然在大部分情況下,關機可能並不重要,但應用程式必須準備好進行重大關機的可能性。 | Windows Vista 中的應用程式關機變更 重新啟動管理員開發 |
清除可逆安裝 | 全新、可逆的安裝可讓使用者在其系統上成功管理(部署和移除)應用程式。 | 如何:使用 ClickOnce 應用程式安裝必要條件 64 位系統上的應用程式安裝 |
數位簽署檔案和驅動程式 | Authenticode 數位簽名可讓用戶確定軟體是正版的。 它也允許人們偵測檔案是否遭到竄改,例如,如果檔案已受到病毒感染。 內核模式程式代碼簽署強制執行是一項稱為程式代碼完整性的 Windows 功能,可藉由在每次將檔案映射載記憶體時驗證檔案的完整性,來改善操作系統的安全性。 CI 會偵測惡意代碼是否已修改系統二進位檔。 當核心模組的簽章無法正確驗證時,也會產生診斷和系統稽核記錄事件。 | Windows 上核心模組的數字簽名 |
請勿根據操作系統版本檢查封鎖安裝或應用程式啟動 | 當沒有任何技術限制時,客戶不會人為地遭到封鎖,無法安裝或執行其應用程式。 一般而言,如果應用程式是針對 Windows Vista 或更新版本所撰寫,則應該沒有理由檢查操作系統版本。 | 操作系統版本控制 |
請勿在 保管庫 模式中載入服務和驅動程式 | 保管庫 模式可讓用戶診斷及疑難解答 Windows。 除非系統的基本作業(例如存儲設備驅動程式)或用於診斷和復原目的(例如防毒掃描器),否則驅動程式和服務不得設定為安全模式載入。 根據預設,安全模式不會啟動大部分未預安裝 Windows 的驅動程式和服務。 除非系統要求它們進行基本作業,或進行診斷和復原,否則應該保持停用狀態。 | 判斷操作系統是否以 保管庫 模式執行 |
遵循用戶帳戶控制 (UAC) 指導方針 | 某些 Windows 應用程式會在系統管理員帳戶的安全性內容中執行,而且許多應用程式需要過多的用戶權力和 Windows 許可權。 控制資源的存取權可讓使用者控制其系統不受垃圾變更的影響(不想要的變更可能是惡意的,例如 rootkit 偷偷接管電腦,或從具有有限許可權的人員採取動作,例如員工在工作計算機上安裝禁止的軟體)。 控制資源存取權的最重要規則是提供使用者執行其必要工作所需的最低存取標準用戶內容。 遵循UAC指導方針會在需要時提供應用程式所需的許可權,而不會讓系統持續暴露在安全性風險中。 | 使用者帳戶控制 UAC:應用程式更新指導方針 |
根據預設,安裝到正確的資料夾 | 用戶應該擁有一致且安全的檔案預設安裝位置體驗,同時維護將應用程式安裝到他們選擇的位置的選項。 也必須將應用程式數據儲存在正確的位置,讓數個人使用同一部計算機,而不會損毀或覆寫彼此的數據和設定。 | 安裝/卸載需求的摘要 |
支援多用戶會話 | Windows 使用者應該能夠執行並行會話,而不會發生衝突或中斷。 | 遠端桌面服務程式設計指導方針 |
支援 x64 版本的 Windows | 隨著 64 位硬體變得越來越普遍,使用者期望應用程式開發人員藉由將應用程式遷移至 64 位,或 32 位版本的應用程式在 64 位版本的 Windows 下執行良好,來利用 64 位架構的優點。 | 應用程式兼容性:Windows Vista 64 位 |