Обратите внимание, что вы можете использовать аналогичную функцию IORegistryEntryCreateCFProperty
для запроса только одного свойства, которое обычно более полезно, если вы на самом деле не пытаетесь создать что-то похожее на сам IORegistryExplorer и пока не делаете знать имена свойств, которые вы хотите проверить.
В обоих случаях это действительно сводится к основному вопросу. Вы заметите, что вместо действительно непрозрачного void*
, IORegistryEntryCreateCFProperty()
фактически возвращает CFTypeRef
, и, аналогично, IORegistryEntryCreateCFProperties()
обещает возвращать только объекты типа CoreFoundation в своем словаре. Это означает, что вы можете запросить тип объекта, используя CFGetTypeID()
. Точное значение этого значения не имеет смысла, но его можно сравнить с идентификаторами типов для ожидаемого набора типов, например, CFStringGetTypeID()
для CFString
, CFDataGetTypeID()
для CFData
и т. Д.
Если вы используете Objective-C, вы можете также выполнить приведение к мосту и обработать значения свойств как NSObject
- и затем узнать конкретный тип, например, с помощью. [object isKindOfClass:[NSString class]]
.