Я новичок в использовании IOKit и заметил, что я думаю, что песочница приводит к сбою.
Вот тест, который я пытаюсь (на Паскале), который отлично работает вне песочницы, но когда я включаю его, IOServiceOpen каждый раз возвращает ошибку kIOReturnNotPermitted.
IOKit небезопасен в песочнице для определенных сервисов? Я пытался получить некоторые скорости вращения вентилятора / температуру процессора, и я вижу, что в 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;
Console
и найдитеsandbox
. Вы должны получать сообщение с обратной трассировкой каждый раз, когда у вас есть нарушение песочницы. - person gaige   schedule 24.05.2014