Я пытаюсь записать тестовый шаблон для каждого сектора отформатированного 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 );
Сбой вызова WriteFile
с ERROR_ACCESS_DENIED
.
Если я напишу один сектор, он будет работать.
Когда я перезаписываю первый сектор и снова подключаю устройство, Windows хочет отформатировать его. В этой ситуации мой код с 2048 секторами сразу работает без ERROR_ACCESS_DENIED
.
Я также отключил том, как описано в CodeProject: WriteFile на физических дисках с Windows 7 , но это ничего не изменило. Очевидно, что том отключен, потому что он больше не виден в проводнике Windows.
Я хочу написать более одного сектора по причинам производительности. Я также боюсь, что могут возникнуть другие проблемы на местах, потому что я не до конца понимаю эту проблему.
Есть предложения?