Winapi 如何防止windows在将原始映像文件写入PhysicalDrive时访问和检测新卷?

Winapi 如何防止windows在将原始映像文件写入PhysicalDrive时访问和检测新卷?,winapi,windows-10,dd,disk-partitioning,usb-flash-drive,Winapi,Windows 10,Dd,Disk Partitioning,Usb Flash Drive,经过无数次的尝试和错误,我现在能够通过使用Windows Api调用(见下文)将原始图像文件(包含多个分区)闪存/写入\.\PhysicalDriveN(在我的例子中是SD卡) 但是,当我打开一些资源管理器窗口并四处单击时,写入过程就会失败(错误433)。另一个恼人的问题是弹出消息告诉我必须格式化一个新卷(在开始时,我还在写!),或者autoplay要求我选择一个操作(在我完成之后) 如何做对 以下是我现在正在做的事情(欢迎任何改进!) 对于每个命令,使用(“\\.\PhysicalDrive

经过无数次的尝试和错误,我现在能够通过使用Windows Api调用(见下文)将原始图像文件(包含多个分区)闪存/写入
\.\PhysicalDriveN
(在我的例子中是SD卡)

但是,当我打开一些资源管理器窗口并四处单击时,写入过程就会失败(错误433)。另一个恼人的问题是弹出消息告诉我必须格式化一个新卷(在开始时,我还在写!),或者autoplay要求我选择一个操作(在我完成之后)

如何做对

以下是我现在正在做的事情(欢迎任何改进!)

  • 对于每个命令,使用(“\\.\PhysicalDrive1”,…)打开和关闭一个新句柄(还尝试使用相同的句柄执行所有操作,并尝试使用各种标志,如文件\标志\无\缓冲,dwShareMode=0,…)
  • (手柄,…)
  • 睡眠5s
  • 而(…)(句柄,…)
  • 设备控制(句柄,…)
  • 设备控制(句柄,…)
如果我不碰任何东西(并且忽略弹出窗口),这在大多数情况下都有效

如何获得独占访问权限并防止windows打扰我?

附加问题:如何知道删除驱动器布局后需要等待多长时间?如果我开始得太早,几秒钟后写入失败(但有些数据已经写入)

这一切都应该在无人值守的情况下运行。最后,我需要刚刚闪现的分区可用,这样我就可以添加一些文件。即使我正在运行“是否卷准备就绪”,但这并不总是立即起作用,我需要多次重试。Todo:添加文件后,磁盘应该是空的

我尝试了diskpart/,但这似乎没有改变任何事情

我尝试了diskpart/,但它说可移动媒体不支持此功能

我尝试了各种命令行工具,比如GNU核心UTIL,但它们都有相同甚至更多的问题

编辑 @DrakeWu MSFT给我指出了一个答案-是的,枚举卷并卸载它们是我可以尝试的,但我会称之为一种解决方法,因为我已经做的第一件事就是删除所有卷。这是错误的方式吗?我更愿意阻止Windows 10在删除卷后自动创建新卷,这样我就可以只在物理磁盘上工作,而不在逻辑卷上工作

我分析了开源——它没有我遇到的问题:当它在写映像时,其他进程被拒绝访问。它通过锁定和卸载卷来实现这一点,这正是上述公认的解决方案:

  • 设备控制(句柄,…)
  • 设备控制(句柄,…)
但是,如果没有卷呢?然后,该工具根本不起作用,它需要一个驱动器号(我猜如果有多个卷和驱动器号分配给该磁盘,它将失败)


所以,如果只有卷可以被锁定,而不是磁盘,我必须先创建一个虚拟卷,才能得到一个锁?我不喜欢那样!仍然希望找到更好的解决方案……

这是你的问题答案吗?@DrakeWu MSFT,谢谢你的有趣链接。我在上面编辑了回复。您是否尝试过将磁盘设置为脱机:也禁用Explorer autoruns@SimonMourier,花了一些时间,但现在我尝试过(使用
diskpart/offline disk
命令),并得到错误“可移动介质上不支持该操作”-因此无法在此处使用:(