【问题标题】:load kernel extension through C API?通过 C API 加载内核扩展?
【发布时间】:2015-06-17 22:16:45
【问题描述】:

是否可以通过 C API 而不是使用system() 调用来加载内核扩展 (kext)?

【问题讨论】:

    标签: c macos kernel-extension xnu


    【解决方案1】:

    是的,您需要KextManager API。特别是,KextManagerLoadKextWithIdentifier() 可能是您要用来加载已安装的 kext 的函数,而 KextManagerLoadKextWithURL() 如果您想加载不在 /System/Library/Extensions 或 /Library/Extensions 中但例如在 .app 包中。

    【讨论】:

      【解决方案2】:
      CFStringRef km_path = CFStringCreateWithCString(kCFAllocatorDefault, "/Library/Extensions/KauthORama.kext",
                                                          kCFStringEncodingUTF8);
      CFURLRef km_url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, km_path,
                                                 kCFURLPOSIXPathStyle, true);
      OSReturn status  = KextManagerLoadKextWithURL(km_url, NULL);
      if (status == kOSReturnSuccess){
              syslog(LOG_NOTICE, "Loaded!");
          }else{
              syslog(LOG_NOTICE, "Lodaed error: %d", errno);
          }
      

      【讨论】:

        猜你喜欢
        • 2017-07-19
        • 2023-03-15
        • 2020-03-20
        • 2018-11-12
        • 2011-01-01
        • 2014-02-17
        • 2015-04-26
        • 1970-01-01
        • 2011-06-24
        相关资源
        最近更新 更多