我正在开发2011年开发的固件。该设备具有USB OTG模块,可以插入PC的USB端口。它有1 MB的闪存。当检测到USB插件时,固件会生成两个文件,PDF和TTV(专有格式)。这些文件保存在闪存中。然后将闪存作为大容量存储设备暴露给Windows。 固件始终生成文件,然后将设备公开给Windows。用户可以读取文件并将自己的文件放在闪存设备上。
固件使用FatFs库作为文件系统。我们使用FAT格式进行闪存存储。
当USB插入时,如果在文件系统中找不到PDF和TTV文件,则它们由固件生成并保存在文件系统中。
现在考虑以下工作流程:
Windows 10格式化FAT文件系统时会发生什么?它以下列三种方式之一创建FAT:
样式1
样式2
样式3
考虑样式1.当固件生成PDF文件时,它将从群集5开始(当FAT[0]
到FAT[4]
被占用时)。一切顺利。可以从Windows的闪存驱动器打开PDF文件。
考虑样式2.当固件生成PDF文件时,它将从群集3开始。固件生成PDF和TTV文件,将它们保存在闪存中,正确更新FAT和根目录(我确定为我从调试中看到了这一点。当设备插入时,Windows将0x000写入FAT[3]
以及跨越PDF文件的所有其他FAT条目!
根目录中的条目仍然存在于PDF文件中。
在任何PDF阅读器中从Windows 10打开PDF文件时,这会导致PDF损坏。类似的东西也出现在Style 3中。似乎Windows 10不喜欢其他设备在集群0中写入集群4(集群0和1已经被保留)。
这在Windows的任何先前版本(7或8.x)中都不会发生。
那么Windows 10会发生什么?为什么Windows 10会破坏FAT?