我正试图为格式化的USB驱动器的每个扇区编写测试模式。有一个逻辑驱动器(例如h:)。此卷是胖格式的,包含要覆盖的数据。另外,我想覆盖整个物理驱动器。该程序运行时的用户权限提高了。
首先,我做了以下工作:
// 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: Windows 7物理驱动器上的WriteFile中描述的卷,但是这并没有改变任何事情。显然,卷已卸载,因为它在Windows中不再可见。
由于成绩原因,我想写的不只是一个部门。我也担心这个领域的其他问题可能会发生,因为我不完全理解这个问题。
有什么建议吗?
发布于 2012-01-30 09:49:59
我没有遇到不同WriteFile()
大小的问题,但我确实解决了
WriteFile():拒绝
<ERROR_ACCESS_DENIED/5>
对'.\physicaldriveX‘的访问
Windows 7中的设备(通常为USB /SSD)以管理员身份运行(提升权限)如下:
计算机管理->磁盘管理:
在那之后,我就可以没有问题地给'.\physicaldriveX‘写文章了。
我认为,只要设备上有任何文件系统,Win7就会锁定物理设备(与以前的Windows版本不同),以避免一致性问题。
发布于 2013-11-04 16:55:20
您不能直接访问由挂载文件系统拥有的驱动器的扇区。
请参阅更改文件系统和存储堆栈,以限制直接磁盘访问和直接卷访问。
FSCTL_DISMOUNT_VOLUME
的文档描述了覆盖文件系统的以下顺序:
您的模式写入操作将在步骤3而不是格式化。
发布于 2013-08-23 00:33:46
另一种方法是使用clean
删除磁盘上的所有分区(和所有数据):
C:\> diskpart
Diskpart> list disk
Diskpart> select disk N (where N is your disk number)
Diskpart> clean
Diskpart> exit
https://stackoverflow.com/questions/6608466
复制相似问题