c++ - USB 驱动器 WriteFile 到卷外的扇区

标签 c++ windows winapi usb usb-drive

我正在开发 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 or FSCTL_DISMOUNT_VOLUME.
  • The volume has no actual file system. (In other words, it has a RAW file system mounted.)

我想在不卸载的情况下顺利地在 USB 上写入 100Mb 的数据。所以我已经尝试了上面的两个案例。

  1. 第二种情况:在文件系统外写入(我已经扩展了每个分区的扇区数,但没有扩展 FAT32 表),但是不卸载是行不通的!
  2. 第四种情况:写入没有任何文件系统的卷(未格式化)。但如果不卸载它也不起作用!

此外,我还尝试创建带/不带文件系统的第二个分区(对于 Windows 不可见),并直接写入第一个分区末尾的偏移量,但也没有成功:我无法在那里读取或写入.

所以,如果有人至少知道其中一个问题的答案:

  1. 如何在外部分区内创建扇区 文件系统?
  2. 有直接在U盘上流畅写入的能力吗?
  3. 我还可以在 Windows 中写入 USB 上的第二个分区而无需 玩转驱动程序、NTCreateFile 和其他深层函数?

最佳答案

我很确定它确实有效,但您没有意识到您正在绕过 Windows。这意味着 Windows 不会注意到您的操作。因此,如果您使用 Windows 检查您所做的事情,它不会报告更改。

解决各个子问题:一个普通的文件系统会填满整个分区,所以你不能。您的功能可以顺利写入 USB,这不是问题。不,Windows 通常将 USB 视为未分区存储。

关于c++ - USB 驱动器 WriteFile 到卷外的扇区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891322/

相关文章:

delphi - 我可以找出记事本中相对于桌面窗口的当前打字坐标吗

c++ - 纯虚函数和继承

c++ - 整数的快速排序算法

c++ - Memset 内存溢出

c++ - 从不同机器同时调用 CreateDirectory 或 CreateFile 时会发生什么?

powershell - 是否可以获取不在 shell 命名空间中的项目的 shell 属性?

c++ - 函数钩子(Hook)地址复制错误

windows - 使用 MinGW 编译凭证提供程序

windows - 如何向我的 schtask 命令添加随机时间偏移量?

windows - 在 Cygwin 中创建文件夹导致权限排序不正确,无法打开文件