Вы должны предварять ваш пост предупреждением о том, что это делает. Неопытный пользователь, делающий это, может легко стереть данные с диска, не зная всех последствий этой команды.

аюсь написать тестовый шаблон для каждого сектора отформатированного 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: запись файла на физические диски с Windows 7 но это ничего не изменило. Очевидно, что том отключен, потому что он больше не виден в проводнике Windows.

Я хочу написать больше, чем один сектор по причинам производительности. Я также боюсь, что могут возникнуть другие проблемы в этой области, потому что я не до конца понимаю эту проблему.

Какие-либо предложения?

Ответы на вопрос(3)

Ваш ответ на вопрос