例如,在以下示例中 IOKit documentation ,该设备的每个条目都有不同的类型,例如Data、Number等
如何使用IOKit读取它的类型?我知道我们可以使用 IORegistryEntryCreateCFProperties 为条目创建一个字典,并将属性读取为 void 指针,并将其转换为我们知道的类型,但是我怎样才能无需使用 IORegistry Explorer 查看即可知道其类型?
最佳答案
请注意,您可以使用类似的函数 IORegistryEntryCreateCFProperty
仅查询一个属性,这通常更有用,除非您实际上正在尝试构建类似于 IORegistryExplorer 本身的东西并且还不知道要检查的属性的名称。
在这两种情况下,这实际上都归结为核心基础问题。您会注意到,IORegistryEntryCreateCFProperty()
实际上返回一个 CFTypeRef
,而不是真正不透明的 void*
,同样,IORegistryEntryCreateCFProperties( )
promise 仅返回其字典中的 CoreFoundation 类型对象。这意味着您可以使用 CFGetTypeID()
查询对象的类型。 。该值的确切值没有意义,但可以将其与预期类型集的类型 ID 进行比较,例如CFStringGetTypeID()
对于CFString
,CFDataGetTypeID()
对于 CFData
等。
如果您使用的是 Objective-C,您还可以执行桥接转换并将属性值视为 NSObject
- 然后使用例如找出特定类型[object isKindOfClass:[NSString class]]
。
关于macos - 如何从 IOKit 读取 IORegistry 中属性的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56637080/