IOKIT mac os IORegistryEntry

时间:2018-04-27 18:58:03

标签: xcode frameworks iokit

我想知道如何使用以下代码链接Intent myIntent = new Intent(context, DoSomething.class) .setAction(getString(R.string.action_do_something)); 。我无法在我的应用程序中链接它:XCode总是警告我,我使用的方法是未知的。我知道使用限制仅在内核扩展中:I / O Kit使用面向对象的编程模型,在受限制的子集中实现C ++ ,以促进增加代码重用,如I/O Kit Overview中所述。如果你能帮助我,我将非常高兴能够学习。

IOKit.framework

2 个答案:

答案 0 :(得分:1)

这些类型和功能都在Kernel.framework中定义。除非您正在构建内核扩展,否则这不是您想要的。用于访问IOKit的用户空间API是通过IOKit.framework提供的C API(IOKitLib)。

此处的文档位于:https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html

您希望IORegistryEntryFromPath()IORegistryEntryCreateCFProperty()功能在用户空间中获取所需信息。

(两者都在<IOKit/IOKitLib.h>中声明,请确保将IOKit.framework添加到目标的库列表中以进行链接。如果您的应用不支持,您可能还需要链接CoreFoundation.framework。 #39; t已经链接到它或Cocoa.framework。)

答案 1 :(得分:1)

在“CFMutableDictionaryRef”与“IORegistryEntryFromPath”,“IORegistryEntryCreateCFProperties”和“CFDictionaryApplyFunction”的使用之下,你得到“平台”中包含的块,它已经用转换字符串或数据对每个元素进行了排序。这是ioreg的存在.c以非常轻的形式出现

void getsystemuuid()
{

    io_registry_entry_t service  = 0;
    struct options      options;
    CFMutableDictionaryRef properties = 0;
    kern_return_t       status      = KERN_SUCCESS;


    service = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/efi/platform");

    status=IORegistryEntryCreateCFProperties( service,&properties,kCFAllocatorDefault,kNilOptions );

    if (status)
        goto sortie;


    CFDictionaryApplyFunction(properties, showitem,&options.depth);

sortie:
    CFRelease(properties);
    IOObjectRelease(service);
}