USB驱动器WriteFile到卷外的扇区

时间:2016-10-06 08:36:27

标签: c++ windows winapi usb usb-drive

我正在开发c ++ WinAPI程序,通过Volume {GUID}和CreateFile函数直接使用WriteFile在我的USB驱动器上写入数据,就像许多例子一样。正如备注中提到的here

  

如果卷没有,则卷句柄上的写入将成功   已安装的文件系统,或者如果满足下列条件之一:

     
      
  • 要写入的扇区是引导扇区。
  •   
  • 要写入的扇区驻留在文件系统空间之外。
  •   
  • 您已使用FSCTL_LOCK_VOLUMEFSCTL_DISMOUNT_VOLUME明确锁定或撤消了该卷。
  •   
  • 该卷没有实际的文件系统。 (换句话说,它安装了RAW文件系统。)
  •   

我希望在没有任何卸载的情况下顺利在USB上写入100Mb的数据。所以我从上面尝试了两个案例。

  1. 第二种情况:在文件系统之外写入(我扩展了每个分区的扇区数而不扩展FAT32表),但是没有卸载它就无法工作!
  2. 第四种情况:在没有任何文件系统的情况下写入卷(未格式化)。但是如果没有卸载它也无法工作!
  3. 此外,我尝试使用/不使用文件系统创建第二个分区(对于Windows是不可见的),并通过第一个分区末尾的偏移直接写入,但也不成功:我无法读取或写在那里。

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

    1. 如何在外部分区内创建扇区 文件系统?
    2. 是否有能力直接在USB上写入?
    3. 我也可以在Windows上写入USB上的第二个分区 玩弄驱动程序,NTCreateFile和其他深层功能?

1 个答案:

答案 0 :(得分:2)

我很确定它确实有效,但你没有意识到你绕过了Windows。这意味着Windows不会注意到你做了什么。因此,如果您使用Windows来检查您所执行的操作,则不会报告更改。

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