通过 C API 加载内核扩展?
load kernel extension through C API?
是否可以通过 C API 而不是加载 内核扩展 (kext
)使用 system()
调用?
是的,您想要 KextManager API。特别是,KextManagerLoadKextWithIdentifier()
可能是您要用来加载已安装的 kext 的函数,而如果您想加载不在 /System/Library/Extensions 或 [=16 中的 kext,则 KextManagerLoadKextWithURL()
=] 但例如在 .app 包中。
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);
}
是否可以通过 C API 而不是加载 内核扩展 (kext
)使用 system()
调用?
是的,您想要 KextManager API。特别是,KextManagerLoadKextWithIdentifier()
可能是您要用来加载已安装的 kext 的函数,而如果您想加载不在 /System/Library/Extensions 或 [=16 中的 kext,则 KextManagerLoadKextWithURL()
=] 但例如在 .app 包中。
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);
}