硬體標識碼
硬體識別碼是廠商定義的識別碼字串,Windows 用來比對裝置與 驅動程式套件。 硬體 ID 用於識別裝置,並指出任何宣稱與該 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)管理員的最常見的個別 PnP 裝置格式。
\*<generic-device-ID>
星號表示有多個枚舉器支援該裝置,例如 ISAPNP 和 BIOS。
<device-class-specific-ID>
如需詳細資訊,請參閱 泛型識別碼。
具有自己已建立命名慣例的現有裝置類別可能會使用自定義格式。 如需其硬體識別碼格式的相關信息,請參閱這類總線的硬體規格。
硬體識別子的字元數,不包括 NULL 終止符,必須小於 MAX_DEVICE_ID_LEN
。 此條件約束適用於硬體識別碼中所有字段長度和任何 \\
欄位分隔符的總和。 如需詳細資訊,請參閱 IRP_MN_QUERY_ID的 Operations 一節。
根列舉裝置的硬體標識碼
根列舉裝置很特殊,因為可以使用可提供硬體標識碼的API來建立這些裝置。 具有共用泛型命名空間的硬體標識碼的根列舉裝置,例如 ROOT\SYSTEM
,可能會衝突,並在更新 Windows 時導致「裝置管理員」中的黃色驚嘆號錯誤圖示。
您可以針對具有根列舉裝置的每個驅動程式,使用唯一的命名空間來防止此錯誤。 針對 USB 或系統裝置,請使用 ROOT\[COMPANYNAME]\[DEVICENAME]
,而不是使用 ROOT\USB
或 ROOT\SYSTEM"
。 然後,在安裝之前,請檢查 devnode 是否已經存在。
取得裝置的硬體識別碼清單
若要尋找指定裝置的硬體識別碼清單,請遵循下列步驟:
- 開啟設備管理員。
- 在樹狀結構中尋找裝置。
- 以滑鼠右鍵點擊裝置,然後選取 屬性。
- 選取 [詳細數據] 索引標籤。
- 在 [屬性] 下拉式清單中,選取 硬體標識符 或 相容標識符。
您也可以藉由擷取裝置上的 DEVPKEY_Device_HardwareIds 屬性,以程式設計方式取得硬體標識符清單。 例如,可以使用 IoGetDevicePropertyData、SetupDiGetDeviceProperty或 CM_Get_DevNode_Property等 API 來擷取該屬性。
此例程所擷取的硬體標識碼清單是 REG_MULTI_SZ 值。 硬體清單的最大字元數,包括在每個硬體識別碼後的 NULL 終止符和最終的 NULL 終止符,共為 REGSTR_VAL_MAX_HCID_LEN
。 硬體標識碼清單中的可能標識碼數目上限為 64。
硬體標識碼的範例
以下是 PnP 裝置的 泛型識別碼 範例:
root\*PNP0F08
以下是PCI裝置的
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02