例如,在以下来自IOKit documentation的示例中,此设备的每个条目都具有不同的类型,例如数据,数字等
如何使用 IOKit 读取其类型?我知道我们可以使用IORegistryEntryCreateCFProperties
为条目创建字典,并将属性读取为void pointer
并将其强制转换为我们知道的类型,但是我如何不看一下就知道它的类型使用IORegistry Explorer?
答案 0 :(得分:2)
请注意,您可以使用类似的函数IORegistryEntryCreateCFProperty
来仅查询一个属性,除非您实际上正在尝试构建类似于IORegistryExplorer本身并且尚不知道其名称的属性,否则通常更有用。您要检查的属性。
在两种情况下,这实际上都归结为Core Foundation问题。您会注意到,void*
不是真正的不透明IORegistryEntryCreateCFProperty()
,而是实际上返回了CFTypeRef
,同样,IORegistryEntryCreateCFProperties()
承诺仅在其字典中返回CoreFoundation类型的对象。这意味着您可以使用CFGetTypeID()
查询对象的类型。确切的值是没有意义的,但是可以将其与预期类型集的类型ID相比较,例如CFStringGetTypeID()
代表CFString
,CFDataGetTypeID()
代表CFData
,依此类推。
如果您使用的是Objective-C,还可以执行桥接强制转换并将属性值视为NSObject
-然后使用例如来查找特定类型。 [object isKindOfClass:[NSString class]]
。