擷取裝置關聯
在 Windows Vista 和更新版本的 Windows 中, 統一裝置屬性模型包含裝置 關聯屬性。 統一裝置屬性模型會使用 屬性索引鍵 來表示這些屬性。 統一裝置屬性模型中表示的關聯清單如下:
- DEVPKEY_Device_BusRelations
- DEVPKEY_Device_EjectionRelations
- DEVPKEY_Device_PowerRelations
- DEVPKEY_Device_RemovalRelations
- DEVPKEY_Device_Parent
- DEVPKEY_Device_Children
- DEVPKEY_Device_Siblings
Windows Server 2003、Windows XP 和 Windows 2000 不支援統一屬性模型的屬性索引鍵。 不過,您可以呼叫 隨插即用 (PnP) 組態管理員函式來擷取對應的資訊。 為了維持與舊版 Windows 的相容性,Windows Vista 和更新版本也支援呼叫 PnP 組態管理員函式來擷取裝置關聯屬性。 不過,您應該使用統一裝置屬性模型的屬性索引鍵來存取裝置關聯屬性。如需如何使用屬性鍵來存取設備磁碟機屬性的詳細資訊,請參閱 存取 Windows Vista 和更新版本 (的裝置實例屬性) 。
如需如何在 Windows Server 2003、Windows XP 和 Windows 2000 上存取裝置關聯屬性的詳細資訊,請參閱下列主題:
擷取退出關聯、移除關聯和電源關聯,以及匯流排關聯
若要擷取 Windows Server 2003、Windows XP 和 Windows 2000 上的裝置關聯資訊,請呼叫 CM_Get_Device_ID_List 並提供下列參數值:
將 pszFilter 設定為 Null 終止字串的指標,這個字串會指定要擷取關聯資訊的裝置實例識別碼。
將 Buffer 設定為緩衝區的指標,以接收 Null 終止的裝置實例識別碼清單。 清單會以額外的 Null 字元終止。 您可以藉由呼叫 CM_Get_Device_ID_List_Size 函式來取得所需的緩衝區大小。
將 BufferLen 設定為 Buffer 緩衝區 的大小,以字元為單位。
將 ulFlags 設定為下列其中一個旗標,以擷取對應的關聯資訊:
CM_GETIDLIST_FILTER_EJECTIONRELATIONS
CM_GETIDLIST_FILTER_EJECTIONRELATIONS旗標會擷 取退出關聯,這是 Windows Vista 和更新版本中 DEVPKEY_Device_EjectionRelations 裝置屬性所提供的相同資訊。
CM_GETIDLIST_FILTER_REMOVALRELATIONS
CM_GETIDLIST_FILTER_REMOVALRELATIONS旗標會擷取 移除關聯,這是 Windows Vista 和更新版本中 DEVPKEY_Device_RemovalRelations 裝置屬性所提供的相同資訊。
CM_GETIDLIST_FILTER_POWERRELATIONS
CM_GETIDLIST_FILTER_POWERRELATIONS旗標會擷取電源關聯,這是 Windows Vista 和更新版本中 DEVPKEY_Device_PowerRelations 裝置屬性所提供的相同資訊。
CM_GETIDLIST_FILTER_BUSRELATIONS
CM_GETIDLIST_FILTER_BUSRELATIONS旗標會擷取 匯流排關聯,這是 Windows Vista 和更新版本中 DEVPKEY_Device_BusRelations 裝置屬性所提供的相同資訊。
如果呼叫 CM_Get_Device_ID_List 成功, CM_Get_Device_ID_List 擷取要求的關係資訊,並傳回CR_SUCCESS。 否則, CM_Get_Device_ID_List 傳回其中一個錯誤碼,其前置詞 「CR_」 定義于 Cfgmgr32.h中。
擷取裝置實例的父系
若要擷取 Windows Server 2003、Windows XP 和 Windows 2000 上父裝置的裝置實例識別碼,請遵循下列步驟:
呼叫 CM_Get_Parent 函式,以擷取裝置實例父裝置的裝置實例控制碼。
呼叫 CM_Get_Device_ID ,以擷取與裝置實例控制碼相關聯的裝置實例識別碼,該識別碼與先前呼叫所擷取的父裝置 CM_Get_Parent。
使用此程式擷取的這項資訊,與 Windows Vista 和更新版本統一裝置屬性模型中 的 DEVPKEY_Device_Parent 屬性所代表的資訊相同。
擷取裝置實例的子系
若要擷取 Windows Server 2003、Windows XP 和 Windows 2000 上裝置實例子裝置的裝置實例識別碼,請遵循下列步驟:
呼叫 CM_Get_Child 函式,以擷取與裝置實例相關聯的第一個子裝置的裝置實例控制碼。
呼叫CM_Get_Sibling需要列舉呼叫CM_Get_Child所擷取之第一個子裝置的所有同層級裝置次數。
呼叫 CM_Get_Device_ID ,以擷取裝置實例識別碼,這些識別碼與呼叫所傳回的裝置實例控制碼相關聯 , CM_Get_Child和 CM_Get_Sibling。
使用此程式擷取的這項資訊,與 Windows Vista 和更新版本整合裝置屬性模型中 的 DEVPKEY_Device_Children 屬性所表示的資訊相同。
擷取裝置實例的同層級
若要擷取 Windows Server 2003、Windows XP 和 Windows 2000 上 Abc 裝置實例 Abc 的裝置實例識別碼,請遵循下列步驟:
呼叫 CM_Get_Parent 函式,以擷取裝置實例 Abc父裝置的裝置實例控制碼。
呼叫 CM_Get_Child 函式,以擷取裝置實例 Abc父裝置之第一個子裝置的裝置實例控制碼。
呼叫 CM_Get_Sibling 需要多次,以列舉父裝置之第一個子裝置的所有同層級裝置。 此列舉也會傳回裝置實例 Abc的控制碼。
呼叫 CM_Get_Device_ID ,以擷取與先前呼叫 CM_Get_Sibling所傳回之裝置實例控制碼相關聯的裝置實例識別碼。 從父裝置第一個子裝置的同層級裝置清單中移除裝置實例 Abc 的控制碼。
使用此程式擷取的資訊與 Windows Vista 和更新版本中統一裝置屬性模型中 DEVPKEY_Device_Siblings 屬性所表示的資訊相同。 如果本節中列出的CM_Xxx函式呼叫成功,CM_Xxx函式會擷取要求的資訊,並傳回CR_SUCCESS。 否則,CM_Xxx函式會傳回其中一個在Cfgmgr32.h中定義的前置詞 「CR_」 的錯誤碼。