ur.*_*ur. 7 windows file-io winapi windows-7
我正在尝试将测试模式写入格式化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 );
Run Code Online (Sandbox Code Playgroud)
呼叫WriteFile失败了ERROR_ACCESS_DENIED.
如果我写一个扇区,它就可以了.
当我覆盖第一个扇区并再次插入设备时,Windows希望对其进行格式化.在这种情况下,我的代码与2048个扇区一起工作没有ERROR_ACCESS_DENIED.
我还卸载了CodeProject中描述的卷:使用Windows 7的物理驱动器上的WriteFile,但这并没有改变任何东西.显然,该卷已卸载,因为它在Windows资源管理器中不再可见.
由于性能原因,我想写一个以上的扇区.我也担心可能会出现该领域的其他问题,因为我不完全了解这个问题.
有什么建议?
小智 3
我没有遇到不同WriteFile()尺寸的问题,但我确实解决了
WriteFile(): 访问
<ERROR_ACCESS_DENIED/5>'\.\physicaldriveX被拒绝
以管理员(提升权限)身份运行的 Windows 7 中的设备(通常是 USB HDD/SSD)如下:
计算机管理->磁盘管理:
之后,我可以毫无问题地写入“\.\physicaldriveX”。
我认为Win7只要设备上有任何文件系统就会锁定物理设备(与以前的Windows版本不同)以避免一致性问题。
| 归档时间: |
|
| 查看次数: |
12328 次 |
| 最近记录: |