我试图写一个测试模式到格式化USB驱动器的每个扇区。有一个逻辑驱动器(例如h :)。该卷是FAT格式的,包含要覆盖的数据。另外,我想覆盖整个物理驱动器。该程序正在提升用户权限下运行。如何在没有收到ERROR_ACCESS_DENIED的情况下将文件写入PhysicalDrive(Windows 7)?
首先,我做了以下内容:
// 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资源管理器中不再可见。
由于性能原因,我想写多于一个扇区。我也担心这个领域的其他问题可能会发生,因为我没有完全理解这个问题。
有什么建议吗?
而你以管理员身份运行? –
@大卫:是的,我跑得很高。 –