Windows 傳統型應用程式的認證需求
檔版本: 10
檔日期: 2015 年 7 月 29 日
本檔包含傳統型應用程式必須符合的技術需求和資格資格,才能參與Windows 10傳統型應用程式認證計畫。
歡迎!
Windows 平臺支援廣泛的產品和合作夥伴生態系統。 在您的產品上顯示 Windows 標誌代表 Microsoft 與公司之間品質的關聯性與共享承諾。 客戶信任您產品的 Windows 品牌,因為它可確保其符合相容性標準,並在 Windows 平臺上表現良好。 成功通過 Windows 應用程式認證可讓應用程式在 Windows 相容性中心展示,而且您可以在網站上顯示認證標誌。
Windows 應用程式認證計畫是由計畫和技術需求所組成,可協助確保具有 Windows 品牌的協力廠商應用程式在執行 Windows 的電腦上都很容易安裝和可靠。 客戶在購買的系統中,重視穩定性、相容性、可靠性、效能和品質。 Microsoft 著重于其投資,以符合這些針對電腦在 Windows 平臺上執行的軟體應用程式需求。 這些工作包括相容性測試,以取得體驗一致性、改善的效能,以及執行 Windows 軟體之電腦上的增強安全性。 Microsoft 相容性測試的設計目的是要與產業合作夥伴共同作業,並持續改善以回應產業開發與消費者需求。
Windows 應用程式認證套件可用來驗證這些需求的合規性,並取代在 Windows 7、Windows 8或Windows 8.1上用來驗證的任何舊版套件。 Windows 應用程式認證套件是適用于 Windows 10 的 Windows 軟體發展工具組 (SDK) 中包含的其中一個元件。
應用程式資格
若要讓應用程式符合Windows 10傳統型應用程式認證資格,其必須符合下列準則,以及本檔中所列的所有技術需求。
- 它必須是獨立應用程式
- 它必須在本機Windows 10電腦上執行
- 它可以是經認證的 Windows Server 應用程式的用戶端元件
- 它必須是程式碼和功能完成
- 它不得透過本機機制與 Windows 市集應用程式通訊,包括透過檔案和登錄機碼,但受支援的企業案例除外
- 它不得危害或危害 Windows 系統的安全性或功能
- 它必須具有唯一的名稱,而且不得由其他人商標
- 所有外部元件都必須個別認證,或符合 Windows 應用程式認證套件
- 它必須具有任何配套應用程式的退出宣告選項
如果傳統型應用程式提交至防毒和/或反間諜軟體 (,亦即反惡意程式碼) 產品類別,則必須符合 ANTIMALWARE 平臺指導方針。 提交之前,必須先簽署並生效 WINDOWS 10 ANTIMALWARE API 授權和清單合約。 合作夥伴必須是 的成員,或讓研究人員在合約所列的其中一個組織中,成為 和 良好的成員。 此功能必須由合約所列的其中一個組織認證Windows 10。 應用程式必須在過去 12 個月內至少經過測試一次,並經過偵測和清除認證。
1.應用程式相容且具有復原性
當應用程式當機或停止回應時,會導致使用者感到挫折。 應用程式應具有復原性和穩定性,並消除這類失敗有助於確保軟體更可預測、可維護、高效能且值得信任。
- 1.1 您的應用程式不得相依于 Windows 相容性模式、AppHelp 訊息,以及任何其他相容性修正
1.2 您的應用程式必須具有相容性資訊清單,並針對支援的 Windows 版本使用適當的 GUID
1.3 您的應用程式必須使用應用程式的元件資訊清單來感知 DPI,而不是呼叫 SetProcessDPIAware
1.4 您的應用程式不得相依于 VB6 執行時間
1.5 您的應用程式不得載入任意 DLL,以使用 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows AppInit_dlls攔截 WIN32 API 呼叫。
2.應用程式必須遵守 Windows 安全性最佳做法
使用 Windows 安全性最佳做法有助於避免暴露在 Windows 攻擊面上。 受攻擊面是惡意攻擊者可以利用目標軟體中的弱點來惡意探索作業系統的進入點。 其中一個最差的安全性弱點是提高許可權。
請注意,測試 2.1 2.6 僅適用于在 Windows 7、Windows 8或Windows 8.1上測試的傳統型應用程式。
- 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 您的應用程式必須使用 /SafeSEH 旗標進行編譯,以確保安全例外狀況處理
3.3 您的應用程式必須使用 /NXCOMPAT 旗標進行編譯,以防止資料執行
3.4 您的應用程式必須使用 /DYNAMICBASE 旗標來編譯位址空間配置隨機化 (ASLR)
3.5 您的應用程式不得讀取/寫入共用 PE 區段
4.應用程式必須遵守系統重新開機管理員訊息
當使用者起始關機時,他們通常想要看到關機成功;他們可能急著離開辦公室,而只是希望他們的電腦關閉。 應用程式必須遵循此需求,不要封鎖關機。 雖然在大部分情況下,關機可能並不重要,但應用程式必須針對重大關機的可能性做好準備。
- 4.1 您的應用程式必須適當地處理重大關機
- 在重大關機中,傳回 FALSE 給WM_QUERYENDSESSION的應用程式將會傳送WM_ENDSESSION和關閉,而逾時以回應WM_QUERYENDSESSION的應用程式將會終止。
- WM\_QUERYENDSESSION與 LPARAM = ENDSESSION\_CLOSEAPP (0x1) 。
主控台應用程式可以呼叫 SetConsoleCtrlHandler 來指定將處理關機通知的函式。 服務應用程式可以呼叫 RegisterServiceCtrlHandlerEx 來指定將接收關機通知的函式。
- WM\_ENDSESSION與 LPARAM = ENDSESSION\_CLOSEAPP (0x1) 。
應用程式至少應該儲存任何使用者資料,並指出重新開機後所需的資訊,以準備應用程式。
5.應用程式必須支援全新且可復原的安裝
全新、可復原的安裝可讓使用者成功管理 (部署和移除其系統上) 應用程式。
- 5.1 您的應用程式必須正確實作全新且可回復的安裝
- DisplayName
- InstallLocation
- Publisher
- UninstallString
- VersionMajor 或 MajorVersion
- VersionMinor 或 MinorVersion
- 如果安裝失敗,應用程式應該能夠回復電腦,並將電腦還原到先前的狀態。
- 重新開機電腦絕對不應該是安裝、卸載或更新結束時的唯一選項。 使用者應該有機會稍後重新開機。
- Windows 清查工具和遙測工具需要已安裝應用程式的完整資訊。 如果您使用 MSI 型安裝程式,MSI 會自動建立下列登錄專案。 如果您未使用 MSI 安裝程式,安裝模組必須在安裝期間建立下列登錄專案:
6.應用程式必須以數位方式簽署檔案和驅動程式
Authenticode 數位簽章可讓使用者確定軟體為正版。 它也可讓其中一個偵測檔案是否已遭到竄改,例如是否受到病毒感染。 核心模式程式碼簽署強制執行是稱為程式碼完整性的 Windows 功能, (CI) ,藉由在每次將檔案映射載入記憶體時驗證檔案的完整性,來改善作業系統的安全性。 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 7、Windows 8和Windows 8.1上執行,而且必須檢查作業系統版本,以判斷要在指定作業系統上安裝哪些元件。
- 只在安裝期間檢查作業系統的最低版本 (的應用程式,而不是在執行時間) 只使用核准的 API 呼叫,且適當地列出應用程式資訊清單中的最低版本需求。
- 安全性應用程式 (防毒、防火牆等) 、系統公用程式 (例如,重組、備份和診斷工具,) 只使用核准的 API 呼叫來檢查作業系統版本。
- 如果您需要特定功能,請檢查功能本身是否可用。 如果您需要 Windows 7,請檢查 Windows 7 或更新版本 (> = 6.2) 。 如此一來,您的偵測程式碼將會繼續在未來的 Windows 版本中運作。 驅動程式安裝程式和卸載模組絕對不應該檢查作業系統版本。
8.應用程式不會以安全模式載入服務或驅動程式
安全模式可讓使用者診斷和疑難排解 Windows。 驅動程式和服務不得設定為以安全模式載入,除非基本系統作業需要這些驅動程式,例如存儲裝置驅動程式或診斷和復原用途,例如防毒掃描器。 根據預設,當 Windows 處於安全模式時,它只會啟動預先安裝 Windows 的驅動程式和服務。
- 8.1 例外狀況和條款
- 必須以安全模式啟動的驅動程式和服務需要放棄。 放棄要求必須包含寫入 SafeBoot 登錄機碼的每個適用驅動程式或服務,並描述應用程式或服務必須以安全模式執行的技術原因。 應用程式安裝程式必須使用下列登錄機碼來註冊所有這類驅動程式和服務:
注意: 您必須測試這些驅動程式和服務,以確保它們以安全模式運作,而不會發生任何錯誤。
9.應用程式必須遵循使用者帳戶控制指導方針
某些 Windows 應用程式會在系統管理員帳戶的安全性內容中執行,而應用程式通常會要求過多的使用者權限和 Windows 許可權。 控制資源的存取權可讓使用者控制其系統,並防止他們遭受不必要的變更。 不想要的變更可能是惡意的,例如使用 rootkit 控制電腦,或是由具有有限許可權的人員所做出的動作結果。 控制資源存取的最重要規則是提供使用者執行必要工作所需的最低存取標準使用者內容。 遵循使用者帳戶控制 (UAC) 指導方針,可在應用程式需要時提供應用程式所需的許可權,而不會讓系統持續暴露在安全性風險中。 大部分的應用程式在執行時間不需要系統管理員許可權,而且應該以標準使用者身分正常執行。
- 9.1 您的應用程式必須具有定義執行層級的資訊清單,並告訴操作系統應用程式需要哪些許可權才能執行
- 執行層級設定為 highestAvailable 和/或 requireAdministrator 的系統管理或系統工具
- 只有協助工具或 UI 自動化架構應用程式會將 uiAccess 旗標設定為 true,以略過使用者介面許可權隔離 (UIPI) 。 若要正確啟動應用程式使用率,此旗標必須是 Authenticode 簽署,而且必須位於檔案系統中的受保護位置,也就是 Program Files。
- 應用程式資訊清單標記僅適用于 EXE,不適用於 DLL。 這是因為 UAC 不會在進程建立期間檢查 DLL。 也值得注意,UAC 規則不適用於 Microsoft 服務。 資訊清單可以是內嵌或外部。
若要建立資訊清單,請建立名稱 < 為 app_name.exe.manifest > 的檔案,並將它儲存在與 EXE 相同的目錄中。 請注意,如果應用程式具有內部資訊清單,則會忽略任何外部資訊清單。 例如:
<requestedExecutionLevel level=「」asInvoker |highestAvailable |requireAdministrator「」 uiAccess=「」true|false「」/>
- 任何系統管理功能都必須移至以系統管理許可權執行的個別進程。 使用者面向的應用程式,例如可透過 [開始] 功能表上的程式群組存取的應用程式,而且需要提高許可權必須經過 Authenticode 簽署。
- 對於執行其主要進程且具有較高許可權的應用程式,需要 (需要Administrator 或 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 |
2012 年 5 月 31 日 | 1.2 | 已新增摘要測試結果 | 1.2 |
2012 年 6 月 29 日 | 3.0 | Windows 8最終檔 | 3.0 |
2013 年 6 月 18 日 | 3.1 | Windows 8.1檔 | 3.1 |
2014 年 2 月 20 日 | 3.2 | 內部更新 | |
2014 年 3 月 18 日 | 3.3 | Windows 8.1 更新版 1 | 3.3 |
2015 年 7 月 29 日 | 10 | Windows 10更新 | 10 |
深入瞭解傳統型應用程式認證
需求 | 描述 |
相容性和復原能力 | 當機&停止回應是使用者的重大中斷,並造成挫折。 應用程式預期可復原且穩定,消除這類失敗有助於確保軟體更容易預測、可維護、高效能且值得信任。 使用者面向應用程式進入點必須以資訊清單顯示相容性,以及宣告正確的 GUID。 使用者面向的應用程式進入點必須以高 DPI 感知為資訊清單,並呼叫適當的 API 以支援 HIGH-DPI。 如需詳細資訊,請參閱: |
遵循Windows 安全性最佳做法 | 使用 Windows 安全性最佳做法有助於避免暴露在 Windows 攻擊面上。 受攻擊面是惡意攻擊者可以利用目標軟體中的弱點來利用作業系統的進入點。 其中一個最差的安全性弱點是提高許可權。 如需詳細資訊,請參閱: |
支援Windows 安全性功能 | Windows 作業系統已實作許多措施來支援系統安全性和隱私權。 應用程式必須支援這些量值,才能維護 OS 的完整性。 未正確編譯的應用程式可能會導致緩衝區溢位,進而造成拒絕服務或執行惡意程式碼。 如需詳細資訊,請參閱 BinScope 工具參考。 |
遵守系統重新開機管理員訊息 | 當使用者起始關機時,在大部分情況下,他們都有強大的期望,可看到關機成功;他們可能急著離開辦公室,並「只想要」其電腦關閉。 應用程式必須遵守此需求,不要封鎖關機。 雖然在大部分情況下,關機可能不重要,但應用程式必須備妥,才能進行重大關機的可能性。 |
清除可反轉安裝 | 全新、可復原的安裝可讓使用者成功管理 (部署和移除其系統上) 應用程式。 如需詳細資訊,請參閱 如何:使用 ClickOnce 應用程式安裝必要條件。 |
數位簽署檔案和驅動程式 | Authenticode 數位簽章可讓使用者確定軟體為正版。 它也可讓其中一個偵測檔案是否遭到竄改,例如,如果檔案受到病毒感染,則為 。 核心模式程式碼簽署強制執行是稱為程式碼完整性的 Windows 功能, (CI) ,藉由在每次將檔案映射載入記憶體時驗證檔案的完整性,以改善作業系統的安全性。 CI 會偵測惡意程式碼是否已修改系統二進位檔案。 當核心模組的簽章無法正確驗證時,也會產生診斷和系統稽核記錄事件。 |
請勿根據作業系統版本檢查封鎖安裝或應用程式啟動 | 當沒有技術限制時,客戶不會以人工方式封鎖安裝或執行其應用程式。 一般而言,如果應用程式是針對 Windows Vista 或更新版本所撰寫,他們就不應該檢查作業系統版本。 如需詳細資訊,請參閱 作業系統版本控制。 |
請勿以安全模式載入服務和驅動程式 | 安全模式可讓使用者診斷和疑難排解 Windows。 除非系統的基本作業需要 (,否則儲存設備磁碟機) 或診斷和復原用途 (例如,防毒軟體掃描器) 、驅動程式和服務不得設定為以安全模式載入。 根據預設,安全模式不會啟動大部分未預先安裝 Windows 的驅動程式和服務。 除非系統要求它們進行基本作業或進行診斷和復原,否則應該保持停用狀態。 如需詳細資訊,請參閱: |
遵循使用者帳戶控制 (UAC) 指導方針 | 某些 Windows 應用程式會在系統管理員帳戶的安全性內容中執行,而且許多應用程式都需要過多的使用者權限和 Windows 許可權。 控制資源的存取權可讓使用者控制其系統不受不必要的變更, (不想要的變更可能是惡意的,例如 rootkit 會竊取機器,或從具有有限許可權的人員採取動作,例如,員工在工作電腦上安裝禁止的軟體) 。 控制資源存取權的最重要規則是提供使用者執行必要工作所需的最低存取標準使用者內容。 遵循 UAC 指導方針可在需要時提供應用程式所需的許可權,而不需要讓系統持續暴露在安全性風險中。 如需詳細資訊,請參閱: |
依預設安裝至正確的資料夾 | 使用者應該有一致且安全的檔案預設安裝位置體驗,同時維護將應用程式安裝到他們選擇的位置的選項。 您也必須將應用程式資料儲存在正確的位置,讓數個人使用同一部電腦,而不會損毀或覆寫彼此的資料和設定。 如需詳細資訊,請參閱 安裝/卸載需求的摘要。 |
支援多使用者會話 | Windows 使用者應該能夠執行並行會話,而不會發生衝突或中斷。 如需詳細資訊,請參閱 遠端桌面服務程式設計指導方針。 |
支援 x64 版本的 Windows | 隨著 64 位硬體變得更普遍,使用者預期應用程式開發人員藉由將其應用程式移轉至 64 位,或 32 位版本的應用程式在 64 位版本的 Windows 下執行,以利用 64 位架構的優點。 |