macos - 如何从 IOKit 读取 IORegistry 中属性的类型?

标签 macos core-foundation iokit

例如,在以下示例中 IOKit documentation ,该设备的每个条目都有不同的类型,例如Data、Number等

如何使用IOKit读取它的类型?我知道我们可以使用 IORegistryEntryCreateCFProperties 为条目创建一个字典,并将属性读取为 void 指针,并将其转换为我们知道的类型,但是我怎样才能无需使用 IORegistry Explorer 查看即可知道其类型?

enter image description here

最佳答案

请注意,您可以使用类似的函数 IORegistryEntryCreateCFProperty仅查询一个属性,这通常更有用,除非您实际上正在尝试构建类似于 IORegistryExplorer 本身的东西并且还不知道要检查的属性的名称。

在这两种情况下,这实际上都归结为核心基础问题。您会注意到,IORegistryEntryCreateCFProperty() 实际上返回一个 CFTypeRef,而不是真正不透明的 void*,同样,IORegistryEntryCreateCFProperties( ) promise 仅返回其字典中的 CoreFoundation 类型对象。这意味着您可以使用 CFGetTypeID() 查询对象的类型。 。该值的确切值没有意义,但可以将其与预期类型集的类型 ID 进行比较,例如CFStringGetTypeID()对于CFStringCFDataGetTypeID()对于 CFData 等。

如果您使用的是 Objective-C,您还可以执行桥接转换并将属性值视为 NSObject - 然后使用例如找出特定类型[object isKindOfClass:[NSString class]]

关于macos - 如何从 IOKit 读取 IORegistry 中属性的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56637080/

相关文章:

macos - 如何以编程方式获取 Mac OS X 保留的快捷键

linux - 在 Linux 上,通过 USB 使用 HID 报告的好方法是什么?

macos - 在 OSX 上查找与 CoreAudio 设备关联的 USB VID/PID

macos - 绕过 Thunderbolt 驱动程序中的重新映射的目的是什么?

ios - Xcode静态库: Where are the symbols?

macos - 使用 hdiutil 创建磁盘镜像时出错

ios - 试图升级到 Swift 1.2 时出现令人困惑的编译错误

iPhone 如何使用 ARC 正确处理 Core Foundation 引用?

ios - CFMutableArray 超出其容量

macos - C 数据结构还是核心基础?