哈Ha! 在本系列中,我们将继续与
WinBtrfs驱动程序和ReactOS成为朋友。
这是您的Windows吗?让我们按顺序开始。 在
上一篇文章之后,实现了FreeLoader引导加载程序的微型驱动程序,该驱动程序允许以只读模式从BTRFS部分读取文件。 这里等待着我的第一个问题-BTRFS是区分大小写的文件系统。 在这里,要搜索
inode结构 (此结构包含有关文件的基本信息),将在目录中使用文件名的哈希值,这使您可以在不提取目录中包含的所有文件的情况下遍历路径。
但是,在Windows世界中,诸如文件名寄存器之类的东西对任何人来说都无关紧要,因此,加载操作系统所需的驱动程序路径可以在注册表中的任何寄存器中写入。
目前,此问题已通过旧的
拐杖解决了-当您请求搜索文件时,System32和SYSTEM32被system32替换,与drivers文件夹相同。 到目前为止,我正在思考如何才能胜任。 我很可能每次都会在目录中上载文件的完整列表,并进行不区分大小写的搜索-速度加载程序在引导加载程序上不会特别明显。

加载程序读取文件,拐杖变硬-我们继续。
我在Bochs虚拟机中开发了引导程序代码,因为这样做是最方便的。 但是她(事实证明)在启动ReactOS时遇到了问题,所以我不得不转移到通常的VirtualBox上。
然后另一个伏击正在等待我-由于某种原因,引导扇区无法正常工作。 事实证明,在执行INT 13h AH = 42h中断(从磁盘扩展读取)时,存在一些问题,因此该功能一次不能读取8个以上的扇区。
最后,第一个错误消息(甚至不是BSOD!)

STATUS_ACCESS_VIOLATION的异常来自WinSxS子系统,该子系统主要来自Wine。 由于所有库都是通过WinSxS加载的,因此启动时花了几天的时间。 最后,事实证明问题出在WinSxS(不是),而是在NtQueryDirectoryFile系统调用中。
WinSxS经常使用此功能通过掩码搜索清单(通过进行如下查询:“ * _Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0。面具以星号开头。 您可以
在此处看到一个非常简单的请求。
令人惊讶的是,这足以完成安装并引导至桌面
也许是世界上第一个从WinBtrfs驱动程序启动。 我的修复程序的第一个实现也有错误,该错误导致图形移至某处而不加载图片。实际上,系统会启动,甚至可以工作(尽管稳定性与最新的
0.4.9版本不同 )。
但是问题仍然很严重:
- 不支持交换文件。 一般来说,在Linux上,也不支持btrfs磁盘上的交换文件,并且该补丁已暂停了好几年。 但是WinBtrfs确实支持它们。 我们对内存管理器的实现与Windows中的实现略有不同,这需要WinBtrfs中尚不可用的另一个系统调用。
- 写入错误和内存溢出。 我设法修复了几个这样的问题,例如,在安装Git客户端时。 我们将找出内存的流向。
- 蓝屏死机关闭并重新启动。 补丁已经在等待批准
直到最后,GSoC仅剩一点点,计划进一步修复错误,并解决交换文件的问题(但这是在程序结束之后)。
好吧,那些想支持此功能的开发人员可以加入
WinBtrfs驱动程序的测试和开发。