在 Windows 系列作系統中,裝置基本上是功能裝置實例的集合,每個實例都代表一個功能端點,可啟用某種形式的裝置通訊。
裝置節點 (devnode) 一詞是指這類功能端點的驅動程式堆疊,以及描述端點及其相關聯狀態的屬性。 例如,支援印表機、掃描器和傳真功能的多功能裝置可以有多個 devnode,分別用於裝置中的每個功能端點。
在 Windows 7 之前,每個功能端點都有與其相關聯的 devnode。 Windows 平台元件和第三方應用程式可以查詢 devnode 以取得裝置狀態和資訊,並可透過功能端點公開的介面與裝置硬體通訊。
對於單一功能裝置,單一 devnode 包含與裝置功能端點相關的所有資訊。 同樣地,多功能裝置具有多個 devnode,這些 devnode 與裝置每個功能端點相關聯。 不過,Windows 無法辨識一組 Devnode 源自相同的實體裝置。 屬於相同多功能裝置的每個 devnode 不包含任何識別資訊,可讓隨插即用 (PnP) 管理員將數個 devnode 群組為單一裝置。 因此,無法全面檢視裝置,以及單一實體裝置所提供的功能。
從 Windows 7 開始,作系統會使用新的標識碼 (容器標識子) 來將源自 並屬於特定實體裝置的每個實例的一或多個 devnode 分組。 容器標識碼是每個 devnode 的屬性,而且是透過全域唯一標識碼 (GUID) 值來指定。
計算機中安裝之實體裝置的每個實例都有唯一的容器標識碼。 代表實體裝置實例上函式的所有devnode都會共用相同的容器標識碼。 下圖顯示該關聯性的範例。
有一個容器標識碼具有巴士驅動程式的特殊意義:NULL_GUID定義為: {00000000-0000-0000-0000-000000000000}。
一般而言,在報告容器標識符時,請勿傳回NULL_GUID做為預設案例。 相反地,請勿處理 BusQueryContainerIDs 案例的IRP_MN_QUERY_ID,並讓 PnP 套用其默認邏輯。
當以容器標識碼傳回NULL_GUID時,總線驅動程式會向 PnP 宣告裝置不得屬於任何容器,因此傳回NULL_GUID僅適用於非常特殊的情況。 例如,像是磁碟區裝置的 devnode 可能會跨越多個磁碟,位於多個容器中,但卻不屬於任何一個容器。 這類裝置的 DEVPKEY_Device_BaseContainerId 等於NULL_GUID,而且完全不會有 DEVPKEY_Device_ContainerId 。
除了非常特殊的情況外,當報告硬體裝置時,公交車司機絕對不應該傳回NULL_GUID,而公交車司機應該防範報告其總線NULL_GUID值的故障硬體。 在這些情況下,總線驅動程式應將此視為裝置錯誤,或將它視為裝置未回報值。