2

我正在尝试获取系统中所有设备的列表以及它们的连接方式。因此,我想从本质上克隆 IO Kit 服务树的结构(您可以使用 来查看IORegistryExplorer)。如何遍历所有键?(这让我感到困惑的原因之一是因为我不明白 , 和 are 之间的io_service区别io_registryio_object

4

1 回答 1

2

服务、注册中心和对象之间的区别仅在于它们使用的环境。否则它们是完全一样的。来自 IOTypes.h:

typedef io_object_t io_registry_entry_t;
typedef io_object_t io_service_t;

有关于Traversing the I/O Registry 的文档,其中还包括有关遍历整个注册表的信息。对于每个条目,您必须获取属性并将它们与您的注册表表示一起保存。

因此,您将使用IORegistryGetRootEntry()、打印/保存其名称和属性,然后使用IORegistryEntryGetChildIterator().

IORegistryEntryCreateCFProperties()您可以通过以下方式获得属性CFDictionaryGetKeysAndValues()。对于这些值,您必须检查这些是什么类型才能打印/保存它们(或使用 CFSHOW)。当您真的想将其克隆到不同的结构(具有不同类型)时,您必须明确处理每个可能的 CFTypeID。

我在https://gist.github.com/JonnyJD/6126680创建了一个工作原型


编辑:

另一个 SO 答案中,链接了(C)源代码ioreg。这应该是打印/提取丢失的 CFType 的好资源。

于 2013-07-31T22:18:19.663 回答