废了好大把劲,又是看源码又是各种测试终于解决了。
众所周知win版的VBox有对执行环境的严格sanecheck,如果你恰好装了或者注册了没有被正常签名过的驱动或者全局组件的话,VBox会强行阻止你启动虚拟机或者拒绝加载相应模块而导致无法正常运行。
解决办法
首先安装上windows sdk,直接装就行。然后确保你用的windows至少8.1或以上版本且未被毫无用处的阉割|精简。
从vbox的各种日志找到出相应问题的文件,复制一份出来。
用sdk里的makecert创建一个根CA(根一定要用这个做,用个人自签名模式,详见相应文档)。
然后用powershell的new-selfsignedcertificate以上面为根创建一个代码签名证书,记得加上“-TextExtension @("2.5.29.19={text}false")”这个拓展。
用sdk里的signtool用代码签名证书对文件进行签名。
将根证书安装为计算机的受信任的根证书颁发机构。
把代码签名证书安装计算机的受信任的发布者。
打开相应文件属性,查看数字证书是否正常。
进入临时系统,用新的替换掉原来的文件。可尝试直接替换,不过大概率被系统占用。
重新运行vbox虚拟机,查看问题是否已经解决。
相应命令的具体使用请谷歌和参找巨硬文档,时间截无所谓。