共用方式為


容器標識碼概觀

在 Windows 系列作業系統中,裝置基本上是功能裝置實例的集合,每個實例都代表功能端點,可讓裝置進行某種形式的通訊。

裝置節點 (devnode) 一詞是指這類功能端點的驅動程式堆疊,以及描述端點及其相關聯狀態的屬性。 例如,支援印表機、掃描器和傳真功能的多功能裝置可以有多個開發節點,一個用於裝置中的每個功能端點。

在 Windows 7 之前,每個功能端點都有與其相關聯的開發節點。 Windows 平臺元件和第三方應用程式可以查詢開發人員節點是否有裝置狀態和資訊,而且可以透過功能端點公開的介面與裝置硬體通訊。

對於單一函式裝置,單一 devnode 包含與裝置功能端點相關的所有資訊。 同樣地,多功能裝置有多個與每個裝置功能端點相關聯的開發節點。 不過,Windows 無法辨識一組開發節點源自相同的實體裝置。 屬於相同多功能裝置的每個 devnode 不包含任何識別資訊,可讓 隨插即用 (PnP) 管理員將數個 devnode 群組為單一裝置。 因此,無法全面檢視裝置,以及單一實體裝置所提供的功能。

從 Windows 7 開始,操作系統會使用新的標識子 (容器 標識碼) ,將源自 並屬於特定實體裝置的每個實例的一或多個 devnode 分組。 容器標識碼是每個 devnode 的屬性,而且是透過全域唯一標識碼 (GUID) 值來指定。

安裝在計算機中之實體裝置的每個實例都有唯一的容器標識碼。 所有代表實體裝置實例上函式的開發節點都會共用相同的容器標識碼。 下圖顯示該關聯性的範例。

圖表說明多功能裝置開發節點的容器標識碼。

有一個容器標識碼具有總線驅動程式的特殊意義:NULL_GUID定義為: {00000000-0000-0000-0000-000000000000}。

一般而言,報告容器標識符時,請勿傳回NULL_GUID做為預設案例。 相反地,請勿處理 BusQueryContainerIDs 案例的IRP_MN_QUERY_ID,並讓 PnP 套用其默認邏輯。

當以容器標識碼傳回NULL_GUID時,總線驅動程式會向 PnP 宣告裝置不得為任何容器的一部分,因此傳回NULL_GUID僅適用於非常特殊的情況。 例如,磁碟區裝置之類的 開發節點 可能會跨越多個容器中的多個磁碟,但不屬於任何容器。 這類裝置的 DEVPKEY_Device_BaseContainerId 等於NULL_GUID,而且完全沒有 DEVPKEY_Device_ContainerId

除了非常特殊的情況之外,當報告硬體裝置時,總線驅動程式絕對不應該傳回NULL_GUID,而總線驅動程式應該防範從其總線回報NULL_GUID值的錯誤硬體。 在這些情況下,總線驅動程式應該將此視為裝置錯誤,或將它視為裝置未回報值。