フォーマット済みのUSBドライブのすべてのセクタにテストパターンを書き込もうとしています。 1つの論理ドライブ(例:h :)があります。このボリュームはFATフォーマットであり、上書きされるデータを含んでいます。また、物理ドライブ全体を上書きしたい。プログラムは、高い権限で実行されています。ERROR_ACCESS_DENIEDを取得せずに物理ドライブに書き込む方法(Windows 7)
まず私は、次のことをやった:
// 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
で失敗します。
1つのセクタを書き込むと動作します。
最初のセクタを上書きしてデバイスを接続しなおすと、Windowsはフォーマットします。この状況では、2048セクターのコードはすぐにERROR_ACCESS_DENIED
なしで動作します。
また、CodeProject: WriteFile on Physical Drives with Windows 7に記載されているように音量をアンマウントしましたが、これは何も変わりませんでした。明らかに、ボリュームはWindowsエクスプローラで表示されなくなっているため、アンマウントされています。
パフォーマンスの理由から、1つ以上のセクタを書きたいと思っています。私はまた、問題を完全に理解していないため、この分野の他の問題が発生する可能性があることを恐れています。
提案がありますか?
あなたは管理者として実行していますか? –
@David:はい、私は上昇しています。 –