Загрузить расширение ядра через C API?
Можно ли загрузить расширение ядра (kext
) через C API вместо использования system()
вызов?
2 ответа
Решение
Да, вы хотите API KextManager. Особенно, KextManagerLoadKextWithIdentifier()
это, вероятно, функция, которую вы хотите использовать для загрузки установленного kext, по сравнению с KextManagerLoadKextWithURL()
если вы хотите загрузить kext, который находится не в / System / Library / Extensions или / Library / Extensions, а, например, в пакете.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);
}