硬體識別碼是廠商定義的識別碼字串,Windows 用來比對裝置與 驅動程式套件。 硬體識別碼會識別裝置。 它表示任何宣告它的驅動程式套件都可以與具有該標識碼的裝置搭配使用,以取得某種程度的功能。
在大多數情況下,裝置有多個硬體 ID。 通常,硬體識別碼的清單會從最適合到最不適合裝置的順序排列。 例如,裝置的概念性硬體標識符清單可能如下所示:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
實際硬體標識碼會使用遵循硬體標識碼格式需求的字串來代表這些概念。
建立裝置的硬體識別碼
硬體識別碼由裝置的 枚舉器(也就是其 匯流排驅動程式)報告給隨插即用管理員(PnP)。 一般而言,當總線驅動程式的作者需要為其回報給 PnP 的裝置建立新的硬體識別碼時,它會使用下列其中一種泛型格式:
<enumerator>\<enumerator-specific-device-ID>
此格式是最常見由單一枚舉器報告給即插即用管理員的個別 PnP 裝置的格式。
\*<generic-device-ID>
星號表示有多個枚舉器支援該裝置,例如 ISAPNP 和 BIOS。
<device-class-specific-ID>
如需詳細資訊,請參閱 泛型識別碼。
具有自己已建立命名慣例的現有裝置類別可能會使用自定義格式。 如需其硬體識別碼格式的相關信息,請參閱這類總線的硬體規格。
硬體識別子的字元數,不包括 NULL 終止符,必須小於 MAX_DEVICE_ID_LEN。 此條件約束適用於硬體識別碼中所有字段長度和任何 \\ 欄位分隔符的總和。 如需詳細資訊,請參閱IRP_MN_QUERY_ID的作業一節。
根列舉裝置的硬體標識碼
根列舉裝置很特殊,因為可以使用可提供硬體標識碼的API來建立這些裝置。 具有共用一般命名空間的硬體識別碼的根列舉裝置,例如 ROOT\SYSTEM,可能會衝突。 更新 Windows 時,裝置管理員中會出現黃色驚嘆號錯誤圖示。
您可以針對具有根列舉裝置的每個驅動程式,使用唯一的命名空間來防止此錯誤。 對於 USB 或系統裝置,請使用 ROOT\[COMPANYNAME]\[DEVICENAME],而不是使用 ROOT\USB 或 ROOT\SYSTEM。 然後,在安裝之前,請檢查 devnode 是否已經存在。
取得裝置的硬體識別碼清單
若要尋找裝置的硬體 ID 清單,請遵循下列步驟:
- 在 Windows 搜尋中,輸入並選取 [裝置管理員]。
- 在裝置管理員中,在樹狀結構中尋找裝置。
- 以滑鼠右鍵點擊裝置,然後選取 屬性。
- 選取 [詳細數據] 索引標籤。
- 針對 [屬性],選取 [硬體識別碼] 或 [相容識別碼]。
您也可以擷取裝置上的 DEVPKEY_Device_HardwareIds 屬性,以程式設計方式取得硬體識別碼清單。 例如,可以使用 IoGetDevicePropertyData、SetupDiGetDeviceProperty或 CM_Get_DevNode_Property等 API 來擷取該屬性。
此例程所擷取的硬體標識碼清單是 REG_MULTI_SZ 值。 硬體清單的最大字元數,包括在每個硬體識別碼後的 NULL 終止符和最終的 NULL 終止符,共為 REGSTR_VAL_MAX_HCID_LEN。 硬體標識碼清單中的可能標識碼數目上限為 64。
硬體 ID 範例
以下是 PnP 裝置的 泛型識別碼 範例:
root\*PNP0F08
以下是PCI裝置的
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02