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