Objective c KextManagerLoadKextWithIdentifier的权限问题

Objective c KextManagerLoadKextWithIdentifier的权限问题,objective-c,macos,permissions,kernel-extension,Objective C,Macos,Permissions,Kernel Extension,我正试图在我正在编写的Objective-CoSx应用程序中重新加载kext。KextManager API似乎是我应该使用的(文档) 调用KextManagerUnloadKextWithIdentifier()可以完美地工作,但是当我在使用KextManagerLoadKextWithIdentifier()后不久要加载同一个kext时,我收到以下控制台错误: com.apple.kextd[12]: Request from non-root process 'App Name' (eui

我正试图在我正在编写的Objective-CoSx应用程序中重新加载kext。KextManager API似乎是我应该使用的(文档)

调用
KextManagerUnloadKextWithIdentifier()
可以完美地工作,但是当我在使用
KextManagerLoadKextWithIdentifier()
后不久要加载同一个kext时,我收到以下控制台错误:

com.apple.kextd[12]: Request from non-root process 'App Name' (euid 501) to load /path/to/kext - not allowed.

这两种方法的文档都声明“调用进程的有效用户id必须为0(超级用户)”,但卸载和加载是否有效?它们的行为应该是一样的吗?

这似乎是你应该在给苹果的错误报告中提出的问题。听上去,API就像宣传的那样工作,只是碰巧在一种情况下也能工作,而根据文档,它不会工作。因此,我建议您按照应用程序中的文档(以root用户的身份调用)使用它。在应用程序中,您将如何以root用户的身份调用它?从我所做的研究来看,现在这是不可能的,因为苹果在应用程序构建方式上的安全性改变(不推荐的API和沙箱),你不能从应用商店应用程序中完成。应用商店规则明确禁止依赖KEXT。在应用商店之外,您可以使用按需启动守护程序以root用户身份运行。(或者使用一系列其他方法中的一种作为root用户运行帮助程序)