Como gravar um arquivo para um PhysicalDrive (Windows 7) sem obter ERROR_ACCESS_DENIED?

Estou tentando escrever um padrão de teste para todos os setores de uma unidade USB formatada. Existe uma unidade lógica (por exemplo, h :). Este volume é formatado em FAT e contém dados a serem substituídos. Além disso, quero substituir toda a unidade física. O programa está sendo executado com direitos de usuário elevados.

Primeiro fiz o seguinte:

// 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 );

A chamada paraWriteFile falha comERROR_ACCESS_DENIED.

Se eu escrever um setor, ele funcion

Quando sobrescrevo o primeiro setor e conecto o dispositivo novamente, o Windows quer formatá-lo. Nesta situação, meu código com 2048 setores funciona ao mesmo tempo semERROR_ACCESS_DENIED.

Também desmontei o volume conforme descrito emCodeProject: WriteFile em unidades físicas com o Windows 7 mas isso não mudou nada. Obviamente, o volume está desmontado porque não está mais visível no Windows Explore

Eu quero escrever mais de um único setor devido a razões de desempenho. Também tenho medo de que outros problemas no campo possam ocorrer porque não entendo completamente esse problem

Alguma sugestão

questionAnswers(3)

yourAnswerToTheQuestion