我正在开发 c++ WinAPI 程序,通过 Volume{GUID} 和 WriteFile
函数直接使用 CreateFile
将数据写入我的 USB 驱动器,正如许多示例所做的那样。如前所述 here在备注中:
A write on a volume handle will succeed if the volume does not have a mounted file system, or if one of the following conditions is true:
- The sectors to be written to are boot sectors.
- The sectors to be written to reside outside of file system space.
- You have explicitly locked or dismounted the volume by using
FSCTL_LOCK_VOLUME
orFSCTL_DISMOUNT_VOLUME
.- The volume has no actual file system. (In other words, it has a RAW file system mounted.)
我想在不卸载的情况下顺利地在 USB 上写入 100Mb 的数据。所以我已经尝试了上面的两个案例。
- 第二种情况:在文件系统外写入(我已经扩展了每个分区的扇区数,但没有扩展 FAT32 表),但是不卸载是行不通的!
- 第四种情况:写入没有任何文件系统的卷(未格式化)。但如果不卸载它也不起作用!
此外,我还尝试创建带/不带文件系统的第二个分区(对于 Windows 不可见),并直接写入第一个分区末尾的偏移量,但也没有成功:我无法在那里读取或写入.
所以,如果有人至少知道其中一个问题的答案:
- 如何在外部分区内创建扇区 文件系统?
- 有直接在U盘上流畅写入的能力吗?
- 我还可以在 Windows 中写入 USB 上的第二个分区而无需 玩转驱动程序、NTCreateFile 和其他深层函数?
最佳答案
我很确定它确实有效,但您没有意识到您正在绕过 Windows。这意味着 Windows 不会注意到您的操作。因此,如果您使用 Windows 检查您所做的事情,它不会报告更改。
解决各个子问题:一个普通的文件系统会填满整个分区,所以你不能。您的功能可以顺利写入 USB,这不是问题。不,Windows 通常将 USB 视为未分区存储。
关于c++ - USB 驱动器 WriteFile 到卷外的扇区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891322/