gpt4 book ai didi

c++ - 如何以编程方式检索 OS X board-id 信息

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:18 32 4
gpt4 key购买 nike

如何在 C++ 中以编程方式检索以下信息:

这是 Mac OSX 中的终端命令:

ioreg -c IOPlatformExpertDevice | awk '/board-id/ {print $4}' | awk -F '\"' '{print $2}'

我使用 IOKit 库来检索信息,例如 IOPlatformSerialNumber 和 PlatformUUID 信息。但是我找不到“board-id”的任何对应键。

最佳答案

如果您的 C++ 代码中有 IOPlatformExpertDeviceio_service_t 句柄,您可以使用 IORegistryEntryCreateCFProperty() 函数获取“board-id”属性。期望收到一个 CFData 对象,但要检查 null 和正确的类型 id 以确保。然后,使用常用的 CFData 方法以您想要的形式提取数据。

如果您还没有获得 IOService 句柄,您应该能够使用 IOServiceGetMatchingService() 到达那里(我希望假设只有一个 是安全的IOPlatformExpertDevice 实例。),或使用 IORegistryGetRootEntry() 获取根,并使用 IORegistryEntryGetChildEntry() 或类似方法将 IORegistry 图移动到平台专家设备。

由于 board-id 属性没有命名符号常量,您只需对其进行硬编码:

CFTypeRef board_id_property = IORegistryEntryCreateCFProperty(
platform_expert_device, CFSTR("board-id"), kCFAllocatorDefault, 0);

请注意,属性值可以采用不同的类型,包括CFNumberCFBooleanCFStringCFDataCFArrayCFDictionary,并且您需要准备好处理类型与您期望的类型不匹配或返回 NULL 的情况(如果属性不匹配)不存在)。使用 CFGetTypeID() 检查类型,例如:

if (board_id_property != NULL && CFGetTypeID(board_id_property) == CFDataGetTypeID())
{
CFDataRef board_id_data = (CFDataRef)board_id_property;
// safe to use CFData* functions now
...

CFRelease(board_id_property);
}
else
{
// Unexpected, do error handling.
...

if (board_id_property != NULL)
CFRelease(board_id_property);
}

关于c++ - 如何以编程方式检索 OS X board-id 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38665698/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com