gpt4 book ai didi

windows - 如何在不出现 ERROR_ACCESS_DENIED 的情况下将文件写入物理驱动器(Windows 7)?

转载 作者:可可西里 更新时间:2023-11-01 13:11:06 25 4
gpt4 key购买 nike

我正在尝试将测试模式写入已格式化的 USB 驱动器的每个扇区。有一个逻辑驱动器(例如 h:)。该卷是 FAT 格式的,包含要覆盖的数据。另外,我想覆盖整个物理驱动器。该程序正在以提升的用户权限运行。

首先我做了以下事情:

// from the drive letter "h:" I get the physical disk number using
// IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS => "\\.\PhysicalDrive2"

hDevice = ::CreateFile( "\\.\PhysicalDrive2", GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );

// get the number of available sectors with IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
// => ulNumberOfSectors

// now I try to write some sectors, e.g. 2 (I want to use a higher value):
WriteFile( hDevice, abBuffer, 2*512, &byteswritten, NULL );

调用 WriteFile 失败并返回 ERROR_ACCESS_DENIED

如果我写一个扇区,它就可以工作。

当我覆盖第一个扇区并重新插入设备时,Windows 想要对其进行格式化。在这种情况下,我的 2048 个扇区代码可以在没有 ERROR_ACCESS_DENIED 的情况下工作。

我还按照 CodeProject: WriteFile on Physical Drives with Windows 7 中的说明卸载了卷但这并没有改变任何东西。显然该卷已卸载,因为它在 Windows 资源管理器中不再可见。

由于性能原因,我想写多个扇区。我也害怕在现场可能会出现其他问题,因为我不完全理解这个问题。

有什么建议吗?

最佳答案

我对不同的 WriteFile() 没有问题尺寸,但我确实解决了

WriteFile(): Access is denied <ERROR_ACCESS_DENIED/5> to '\.\physicaldriveX

Windows 7 中的设备(通常是 USB HDD/SSD)以管理员身份(提升的权限)运行,如下所示:

计算机管理 -> 磁盘管理:

  • 音量(H:在您的情况下)-> 右键单击​​ -> 删除音量
  • 磁盘(在您的情况下为磁盘 2)-> 右键单击​​ -> 离线
  • 磁盘(在您的情况下为磁盘 2)-> 右键单击​​ -> 联机

在那之后,我可以毫无问题地写入“\.\physicaldriveX”。

我认为只要设备上有任何文件系统,Win7 就会锁定(与以前的 Windows 版本不同)物理设备以避免一致性问题。

关于windows - 如何在不出现 ERROR_ACCESS_DENIED 的情况下将文件写入物理驱动器(Windows 7)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6608466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com