//
// plugin_start.cpp
// Lilu
//
// Copyright © 2016-2017 vit9696. All rights reserved.
//
#include <Headers/plugin_start.hpp>
#include <Headers/kern_api.hpp>
#include <Headers/kern_util.hpp>
#include <Headers/kern_version.hpp>
#ifndef LILU_CUSTOM_KMOD_INIT
bool ADDPR(startSuccess) = false;
#else
// Workaround custom kmod code and enable by default
bool ADDPR(startSuccess) = true;
#endif /* LILU_CUSTOM_KMOD_INIT */
bool ADDPR(debugEnabled) = false;
uint32_t ADDPR(debugPrintDelay) = 0;
#ifndef LILU_CUSTOM_IOKIT_INIT
OSDefineMetaClassAndStructors(PRODUCT_NAME, IOService)
PRODUCT_NAME *ADDPR(selfInstance) = nullptr;
IOService *PRODUCT_NAME::probe(IOService *provider, SInt32 *score) {
ADDPR(selfInstance) = this;
setProperty("VersionInfo", kextVersion);
auto service = IOService::probe(provider, score);
return ADDPR(startSuccess) ? service : nullptr;
}
bool PRODUCT_NAME::start(IOService *provider) {
ADDPR(selfInstance) = this;
if (!IOService::start(provider)) {
SYSLOG("init", "failed to start the parent");
return false;
}
return ADDPR(startSuccess);
}
void PRODUCT_NAME::stop(IOService *provider) {
ADDPR(selfInstance) = nullptr;
IOService::stop(provider);
}
#endif /* LILU_CUSTOM_IOKIT_INIT */
#ifndef LILU_CUSTOM_KMOD_INIT
EXPORT extern "C" kern_return_t ADDPR(kern_start)(kmod_info_t *, void *) {
// This is an ugly hack necessary on some systems where buffering kills most of debug output.
lilu_get_boot_args("liludelay", &ADDPR(debugPrintDelay), sizeof(ADDPR(debugPrintDelay)));
auto error = lilu.requestAccess();
if (error == LiluAPI::Error::NoError) {
error = lilu.shouldLoad(ADDPR(config).product, ADDPR(config).version, ADDPR(config).runmode, ADDPR(config).disableArg, ADDPR(config).disableArgNum,
ADDPR(config).debugArg, ADDPR(config).debugArgNum, ADDPR(config).betaArg, ADDPR(config).betaArgNum, ADDPR(config).minKernel,
ADDPR(config).maxKernel, ADDPR(debugEnabled));
if (error == LiluAPI::Error::NoError) {
DBGLOG("init", "%s bootstrap %s", xStringify(PRODUCT_NAME), kextVersion);
(void)kextVersion;
ADDPR(startSuccess) = true;
ADDPR(config).pluginStart();
} else {
SYSLOG("init", "parent said we should not continue %d", error);
}
lilu.releaseAccess();
} else {
SYSLOG("init", "failed to call parent %d", error);
}
for (size_t i = 0; i < ADDPR(config).debugArgNum; i++) {
if (checkKernelArgument(ADDPR(config).debugArg[i])) {
ADDPR(debugEnabled) = true;
break;
}
}
if (checkKernelArgument("-liludbgall"))
ADDPR(debugEnabled) = true;
// Report success but actually do not start and let I/O Kit unload us.
// This works better and increases boot speed in some cases.
return KERN_SUCCESS;
}
EXPORT extern "C" kern_return_t ADDPR(kern_stop)(kmod_info_t *, void *) {
// It is not safe to unload Lilu plugins unless they were disabled!
return ADDPR(startSuccess) ? KERN_FAILURE : KERN_SUCCESS;
}
#endif /* LILU_CUSTOM_KMOD_INIT */
愿你人间暖阳
- 粉丝: 4
- 资源: 3
最新资源
- transformer-6layer.hbm
- 中小型制造企业质量管理系统--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 高校危化试剂仓储系统--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 驾校预约学习系统--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 基于下垂控制,引入电感,两台单相逆变器非同步并机 默认发2018b 控制方式为下垂控制且引入电感(图2),使用二阶广义积分器(SOGI)实现有功和无功解耦 引入电感前后有功无功对比如图4和图5 功能
- 西南交通大学车辆工程专业大四上车辆综合实训ame仿真模型
- 同城上门喂遛宠物系统--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 基于javaweb的在线远程考试系统.zip
- 招生宣传管理系统pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- comsol相控阵检测 16阵元放在有机玻璃斜楔上检测工件内部缺陷,都是固体力学,图1红圈?位置的波为横孔缺陷的反射接收波 工件里的波看起来好像没怎么折射,其实那是斜楔纵波声速接近工件横波声速造成的
- 高校疫情防控web系统pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 高校汉服租赁网站--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 高校物品捐赠管理系统--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 小米音箱 MiGPT源码包
- 高校竞赛管理系统--论文pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
- 智慧社区居家养老健康管理系统pf-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页