gpt4 book ai didi

macos - IOCreatePlugInInterfaceForService 失败,w/kIOReturnNoResources/0xe00002be

转载 作者:行者123 更新时间:2023-12-02 23:02:04 25 4
gpt4 key购买 nike

IOCreatePlugInInterfaceForService 因 kIOReturnNoResources/0xe00002be 失败

我正在将旧的基于 FireWire 的命令行实用程序重写为 XPCService。我需要一些有关 IOKit 函数的帮助。

  • 以下部分是获取 FireWireAVCLibUnit 的 IOCFPlugInInterface。
    (与原始代码几乎相同;基本思想来自旧版 simpleAVC 示例代码)。
  • 当我在 XPCService 中调用 IOCreatePlugInInterfaceForService() 时,它总是无法在 IOReturn.h 中返回 0xe00002be = kIOReturnNoResources
  • 我已确认没有沙箱,也没有针对 XPC 服务进行强化。
  • 原始命令行实用程序在 macOS 10.14 上完美运行,有人能给我关于这个主题的提示吗?
<小时/>
CFDictionaryRef dict = CFDictionaryCreateCopy(kCFAllocatorDefault, self.dict);
kern_return_t result = IOServiceGetMatchingServices(kIOMasterPortDefault, dict, &serviceIterator);
if (result == KERN_SUCCESS && serviceIterator != IO_OBJECT_NULL) {
while ((service = IOIteratorNext(serviceIterator)) != IO_OBJECT_NULL) {
SInt32 score = 0;
kern_return_t result = IOCreatePlugInInterfaceForService(service,
kIOFireWireAVCLibUnitTypeID,
kIOCFPlugInInterfaceID,
&interface,
&score);
if (result != KERN_SUCCESS) continue;
// result 0xe00002be = kIOReturnNoResources in IOReturn.h
break;
}
}
<小时/>

其他详细信息

我在 opensource.apple.com 中找到了 IOCFPlugIn.c。经过基本核实后,- IOCreatePlugInInterfaceForService() 未能IOCFPlugIn->Start()

(*iunknown)->QueryInterface(iunknown, CFUUIDGetUUIDBytes(interfaceType),
(LPVOID *)&interface);
<snip>
kr = (*interface)->Probe(interface, plist, service, &score);
<snip>
haveOne = (kIOReturnSuccess == (*interface)->Start(interface, plist, service));
  • Probe() 返回了 kIOReturnSuccess,
  • Start() 失败,kIOReturnNoDevice = 0xe00002c0。并且haveOne = false。
  • 最终 IOCreatePlugInInterfaceForService() 返回 kIOReturnNoResources = 0xe00002be。

这是否与 macOS 上的某些安全功能有关?

<小时/>

已修改

  • 我发现具有相机访问权限的强化运行时被 FireWireAVCLibUnit 拒绝(tccd 显示错误)。
  • 即使没有沙箱,没有检查 Xcode 中 XPC 服务的硬化,XPCservice 也是通过沙箱处理的。 (macOS 10.14.6 + Xcode 10.3)
  • 如果您有建议,我将不胜感激。

最佳答案

我已经找到解决办法了。
- 在Info.plist中添加NSCameraUsageDescription,IOFireWireAVCUserClient就可以工作。
- 如果是沙盒,还需要 com.apple.security.device.firewire。

<小时/>

即使功能沙箱关闭,tccd 也会验证 info.plist。
如果“隐私 - 摄像头使用说明”不可用,sandboxd 会拒绝使用 IOFireWireAVCUserClient 设备。

Information Property List Key Reference/Cocoa Keys

关于macos - IOCreatePlugInInterfaceForService 失败,w/kIOReturnNoResources/0xe00002be,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667962/

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