我正在尝试将测试模式写入格式化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 …