¿Cómo escribir un archivo en un disco físico (Windows 7) sin obtener ERROR_ACCESS_DENIED?
Estoy tratando de escribir un patrón de prueba en cada sector de una unidad USB formateada. Hay una unidad lógica (por ejemplo, h :). Este volumen tiene formato FAT y contiene datos para sobrescribir. Además, quiero sobrescribir todo el disco físico. El programa se ejecuta con derechos de usuario elevados.
Primero hice lo siguiente:
// 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 );
La llamada aWriteFile
falla conERROR_ACCESS_DENIED
.
Si escribo un sector, funciona.
Cuando sobrescribo el primer sector y enchufo el dispositivo de nuevo, Windows quiere formatearlo. En esta situación, mi código con 2048 sectores a la vez funciona sinERROR_ACCESS_DENIED
.
También desmonté el volumen como se describe enCodeProject: WriteFile en unidades físicas con Windows 7 pero esto no cambió nada. Obviamente, el volumen está desmontado porque ya no es visible en el Explorador de Windows.
Quiero escribir más de un sector debido a razones de rendimiento. También me temo que podrían ocurrir otros problemas en el campo porque no entiendo completamente este problema.
¿Alguna sugerencia