Gen*_*Ptr 6 macos iokit appstore-sandbox
我是使用 IOKit 的新手,并注意到我认为是沙箱导致它失败。
这是我正在尝试的测试(在 Pascal 中),它在沙箱外运行良好,但是当我启用它时,IOServiceOpen 每次都会返回错误 kIOReturnNotPermitted。
对于某些服务,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;
Run Code Online (Sandbox Code Playgroud)
小智 5
我在尝试读取 SMC 密钥以便从 OSX Yosemite“Today 扩展”内部获取传感器温度和风扇速度时发现了同样的问题。该扩展需要进行沙箱处理,而且每次尝试读取温度和风扇传感器时,我都会收到 kIOReturnNotPermissioned 错误。
我让它工作的唯一方法是创建一个 XPC 服务来管理所有 SMC 内容,并将其配置为启动代理。这样,沙盒应用程序(“today”扩展)会向 XPC 服务请求所有相关数据,而不是直接干扰 IOKit。
到目前为止,它似乎运行正常。
归档时间: |
|
查看次数: |
2620 次 |
最近记录: |