检索设备关系

在 Windows Vista 和更高版本的 Windows 中, 统一设备属性模型 包括设备关系属性。 统一设备属性模型使用 属性键 来表示这些属性。 统一设备属性模型中表示的关系列表包括:

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 设置为 缓冲区 的大小(以字符为单位)。

  • 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 返回 Cfgmgr32.h 中定义的前缀为“CR_”的错误代码之一。

检索设备实例的父级

若要检索 Windows Server 2003、Windows XP 和 Windows 2000 上父设备的设备实例标识符,请执行以下步骤:

  1. 调用 CM_Get_Parent 函数以检索设备实例的父设备的设备实例句柄。

  2. 调用 CM_Get_Device_ID 以检索与父设备关联的设备实例标识符,该句柄由上一次调用 CM_Get_Parent检索。

使用此过程检索的此信息与 Windows Vista 及更高版本中统一设备属性模型中 的 DEVPKEY_Device_Parent 属性表示的信息相同。

检索设备实例的子级

若要在 Windows Server 2003、Windows XP 和 Windows 2000 上检索设备实例的子设备的设备实例标识符,请执行以下步骤:

  1. 调用 CM_Get_Child 函数以检索与设备实例关联的第一个子设备的设备实例句柄。

  2. 调用 CM_Get_Sibling 多次,只要枚举调用 CM_Get_Child检索到的第一个子设备的所有同级设备。

  3. 调用 CM_Get_Device_ID 以检索与调用 CM_Get_ChildCM_Get_Sibling 返回的设备实例句柄关联的设备实例标识符。

使用此过程检索的此信息与 Windows Vista 及更高版本中统一设备属性模型中 的 DEVPKEY_Device_Children 属性表示的信息相同。

检索设备实例的同级

若要检索 Windows Server 2003、Windows XP 和 Windows 2000 上设备实例 Abc 的同级设备的设备实例标识符,请执行以下步骤:

  1. 调用 CM_Get_Parent 函数以检索设备实例 Abc 的父设备的设备实例句柄。

  2. 调用 CM_Get_Child 函数以检索设备实例 Abc 父设备的第一个子设备的设备实例句柄。

  3. 根据需要调用 CM_Get_Sibling 多次调用,以枚举父设备的第一个子设备的所有同级设备。 此枚举还将返回设备实例 Abc 的句柄。

  4. 调用 CM_Get_Device_ID 以检索与先前调用 CM_Get_Sibling 返回的设备实例句柄关联的设备实例标识符。 从父设备的第一个子设备的同级设备列表中删除设备实例 Abc 的句柄。

使用此过程检索的信息与 Windows Vista 及更高版本中统一设备属性模型中 的 DEVPKEY_Device_Siblings 属性表示的信息相同。 如果本节中列出的 CM_Xxx 函数调用成功, CM_Xxx 函数将检索请求的信息并返回CR_SUCCESS。 否则, CM_Xxx 函数将返回 Cfgmgr32.h 中定义的前缀为“CR_”的错误代码之一。