[096] 增加 CHID 讓裝置驅動程式可透過 Windows Update 安裝

[096] 增加 CHID 讓裝置驅動程式可透過 Windows Update 安裝

Update on 2017-03-16: Microsoft 慢慢將系統轉移至新的 Microsoft Hardware Dev Center,CHID「上架」流程有所改變,介面設計變好了,請參照新文章


前陣子有個 Windows 驅動程式的開發需求:

裝置驅動程式必須能讓終端電腦透過 Windows Update 自動安裝與更新。

為滿足此需求必須具備以下條件:

  1. 驅動程式需通過 Windows HLK(名字常換,別理會) 一系列測試
  2. HLK 測試通過後將結果加上**數位簽章(需要 Code Signing Certificate)**後上傳到 Hardware Dev Center
  3. 以前只要求 Code Signing Certificate,現在則需要 Extended Validation (EV) Code Signing Certificate,最大的差異就是比較貴
    • 欲購買 Code Signing Certificate,我推薦便宜好用的 DigiCert。參考我先前的文章,內有 DigiCert 全系列五折優惠
  4. 利用 Driver Distribution 把驅動程式發佈到 Windows Update

WHQL 歷來的改變

  1. 以前 WHQL 認證要收費,記得單一平台是 $250 鎂。現在則是完全免費(不計較 Code Signing Certificate)
  2. 以前都用 Hardware ID 來匹配硬體裝置,現在有可能需要搭配 CHID(本文重點) 才行。
  3. 幾乎每次 Windows 大改版,硬體認證都會有所變動,以及工具更名之類(WLK, HCK, HLK)的。

Hardware ID

多數時候,只要裝置的 Hardware ID 即能上架到 Windows Update。但這次遇到的案例比較特別,與微軟官方書信往來一陣後,發現原本非必要(Optional)的 CHID(Computer Hardware ID) 在這個案子中變成了必要條件。Hardware ID 相關資料請參考官方文件:

Computer Hardware ID

CHID(Computer Hardware ID)是收集電腦上 SMBIOS 中的若干欄位來產生一組 GUID,再將它放到 INF 檔案裡或上傳到 Hardware Dev Center。WDK 內含的 ComputerHardwareIds.exe 可用來產生 CHID。

ComputerHardwareIds.exe 可以挑選要用哪些 SMBIOS 欄位來當做產生 CHID 的參數。詳情請見官方文件:

Publish to Windows Update

我遇到的情況是驅動程式已經提交而且通過認證,原本可以透過 WU 安裝與更新驅動程式,但在 Windows 10 之後出問題了。詢問微軟得到需加入 CHID 才能解決這個問題,底下一步一步說明如何把 CHID 加到特定的 Submission。

① 進到 Driver distribution 頁面,並選取 Manage driver distribution by devices

② 選擇裝置

③ 點選 Submission ID(同一個裝置可以有一或多個 Submission ID)

④ 點選 Change Distribution Settings 按鈕

⑤ 點選 Change Settings 按鈕

⑥ 於跳出對話框內的下拉式選單選取 Distribute 後其他欄位不用填,按 Save 按鈕

⑦ 按下原本不能按的 Next 按鈕

⑧ 點選 Bundle xxxx 然後點選下方出現的 Edit 按鈕

⑨ 將 CHID(不含 {})填到下圖箭頭所指的欄位,按下 Add 鈕後按 Save

⑩ 最後按 Save 鈕,然後按 Submit

沒有問題的話,會看到 Distribution Status 欄位呈現 Publishing in Progress 字樣就算大功告成,接下來等候幾個小時,通過後,Distribution Status 呈現 Distributed