【发布时间】:2011-09-30 07:26:24
【问题描述】:
我正在尝试将测试模式写入已格式化 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 资源管理器中不再可见。
由于性能原因,我想写入多个扇区。我也担心可能会出现该领域的其他问题,因为我不完全理解这个问题。
有什么建议吗?
【问题讨论】:
-
你以管理员身份运行?
-
@David:是的,我正在提升。
标签: windows winapi file-io windows-7