1
seers 163 天前 via Android
我记得作者说过做了很多的 hook
|
2
dode 163 天前
开启安全引导后,Ventoy 就用不了了呀
|
3
sNullp 163 天前
> 那么 Ventoy 是如何实现在 win/linux 内核启动后的保护模式下,iso 依然成为模拟光驱可见的? win/linux 内应该不会预置对应驱动程序来对接模拟光驱的吧?
我觉得这不是 Ventoy 做的。而确实是内核做的。 |
5
WuSiYu 162 天前
感觉还是像你说第三段说的 grub2 那样吧,只是这个配置过程被自动化了
|
6
kuanat 162 天前 2
你的疑问是对的。一旦离开 UEFI/grub 之后,之前 ventoy 虚拟出来的光驱设备就不存在了。
然后魔改 grub2 也是对的,只是如果你去看修改的代码 https://github.com/ventoy/Ventoy/tree/master/GRUB2/MOD_SRC/grub-2.04 会发现这些改动都是表面的,跟启动机制没有关系。 所以 ventoy 并不是用 grub2 loopback 加载 iso 完成引导的。 “除非系统内有对应的驱动程序去专门去访问这段内存及模拟驱动器”这句话不完全对,Win/Linux 内核都有 loopback 加载机制,也就是你说的“驱动”。真正的问题,去哪里加载。这里需要的是逻辑意义上的地址,不管它背后是内存还是硬盘文件。 如果你大致浏览一下 ventoy 的代码,肯定会注意到 vtoyjump 这个与众不同的名字,其他目录要么是一些基础功能,要么是 ventoy 的功能。另外 ventoy 是可以输出 log 的,你会在日志中看到 vtoyjump 相关功能的调用。 以下是我根据之前的印象总结的,我估计原理应该没问题,细节可能有出入。 如果是引导 Linux ,会首先引导 ventoy.cpio ,完成虚拟光驱初始化之后再链式引导 initrd 。 如果是引导 Windows ,会用 vtoyjump 替代 Windows 的引导文件(大概名字是 winpeXXX 的一个文件),然后原版在内存中保留一份副本。(这个“替代”是 overlay 的意思,并非修改原始文件,相关的 injection 功能也被 ventoy 做成了插件)此时还处于 grub 阶段,以你描述的 loopback 方式引导 boot.wim ,完成内核初始化。此时 grub 阶段虚拟的光驱设备就访问不到了。 原本下一步是引导 winpe 进入安装程序,这时被 vtoyjump 替代,vtoyjump 利用 NT 内核 API 加载原始 iso 成为 loopback 设备。 之后 vtoyjump 再引导 winpe 那个程序,就进入正常安装过程了。 |