macos - 沙盒中不允许使用 IOKit?

标签 macos iokit appstore-sandbox

我是 IOKit 的新手,并且注意到我认为是沙箱导致它失败。

这是我正在尝试的测试(在 Pascal 中),它在沙箱外运行良好,但当我启用它时,IOServiceOpen 每次都会返回错误 kIOReturnNotPermission。

对于某些服务,IOKit 在沙箱中不安全吗?我试图获取一些风扇速度/CPU 温度,我看到 AppStore(沙盒)中有一些应用程序这样做,所以我相信这是可能的。我唯一可以确认的是,似乎有一个 XPC 服务与该应用程序捆绑在一起作为助手,所以这也许是让 IOKit 工作的线索?我基本上尝试了所有权利,但似乎都没有帮助。

感谢您的任何想法。

procedure TestIOKit;
var
    err: kern_return_t;
    masterPort: mach_port_t;
    iterator: io_iterator_t;
    device: io_object_t;
    matchingDictionary: CFMutableDictionaryRef;
    conn: io_connect_t;
begin
    IOMasterPort(0, masterPort);
    matchingDictionary := IOServiceMatching('AppleSMC');
    err := IOServiceGetMatchingServices(masterPort, matchingDictionary, iterator);
    if err <> kIOReturnSuccess then
        writeln('IOServiceGetMatchingServices: ', err);

    device := IOIteratorNext(iterator);
    IOObjectRelease(iterator);
  if device = 0 then
        writeln('no smc found');

    err := IOServiceOpen(device, mach_task_self_, 0, conn);
  if err <> kIOReturnSuccess then
        writeln('IOServiceOpen: ', err);
end;

最佳答案

我在尝试读取 SMC key 以便从 OSX Yosemite“Today 扩展”内部获取传感器温度和风扇速度时发现了同样的问题。该扩展需要沙盒化,而且每次尝试读取温度和风扇传感器时,我都会收到 kIOReturnNotPermission 错误。

我让它工作的唯一方法是创建一个 XPC 服务来管理所有 SMC 内容,并将其配置为启动代理。这样,沙盒应用程序(“today”扩展)就会向 XPC 服务请求所有相关数据,而不是直接干扰 IOKit。

到目前为止,它似乎工作正常。

关于macos - 沙盒中不允许使用 IOKit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244349/

相关文章:

macos - 防止 OS X 应用程序的沙箱容器中的原始文件通过拖放或共享扩展进行修改?

python - eclipse出错,导入覆盖的时候?

c++ - OS X dylib 指的是可执行文件本身

macos - 如何为 OS X 创建显示器?

swift - 使用 IOKit 和 Swift 进行简单的键重映射

objective-c - 如何在两个沙盒应用程序之间共享首选项文件?

python - 如何在 Mac 上通过 Python 在 TextEdit 中打开文本文件?

macos - 插入 64 位英特尔 osx

swift - 如何更改 AVCaptureSession 的亮度、对比度、白平衡、曝光、焦点和清晰度?

app-store - 如何将 JavaAppLauncher 嵌入到 App Store 的沙箱中