2016-10-06 26 views
0

私のUSBドライブに直接データを書き込むためのC++ WinAPIプログラムは、ボリューム数{GUID}とWriteFileによって、CreateFileで直接実行されます。備考にhereを述べたように:ボリューム外のセクタへのUSBドライブWriteFile

ボリュームが マウントされたファイルシステムを持っていない場合、ボリュームハンドル上の書き込みが成功するか、次の条件のいずれかに該当する場合:

  • 部門書き込まれるのはブートセクタです。
  • ファイルシステムスペースの外部に存在するように書き込まれるセクタ。
  • FSCTL_LOCK_VOLUMEまたはFSCTL_DISMOUNT_VOLUMEを使用して、ボリュームを明示的にロックまたは解除しました。
  • ボリュームには実際のファイルシステムはありません。 (言い換えれば、それはRAWファイルシステムがマウントされている。)

私はアンマウントせずにスムーズにUSB上のデータの100Mbのを書きたいと思います。だから私は上記の2つのケースを試しました。

  1. 秒ケース:ファイルシステムの外を書く(私はFAT32テーブルを延長せずにパーティションあたりのセクタ数を拡張しました)、それはアンマウントせずに動作しません!
  2. 4番目のケース:ファイルシステムを使用しないでボリュームに書き込む(フォーマットされていない)。しかし、アンマウントしなければ動作しません!

また、私はファイルシステムの有無にかかわらず、第2パーティション(Windowsでは見えません)を作成しようとしましたが、最初のパーティションの終わりからのオフセットによって直接そこに書き込もうとしましたが、またはそこに書き込む。

だから、誰もが少なくとも質問の中への答えを知っている場合:

  1. どのように私は ファイルシステム外パーティション内のセクタを作成することができますか?
  2. USBにスムーズに書き込む機能はありますか?
  3. ドライバ、NTCreateFile、その他の深い機能を持たずに、USB上の2番目のパーティションにWindowsで書き込むこともできますか?
+3

これはマルウェアにのみ該当する可能性があります。 –

+0

@DavidHeffernanいいえ、それは学問目的のためだけです:)私はちょうどUSBとFAT32形式に分割し、msdnの発言が正しいかどうかをチェックしようとしました。 – heyjohnnyfunt

答えて

2

実際にはうまくいきましたが、あなたがWindowsをバイパスしていることはわかりません。つまり、Windowsはあなたがしたことに気付かなかったでしょう。したがって、Windowsを使用して実行したことを確認しても、変更は報告されません。

個々のサブ質問に対処するには:通常のファイルシステムはパーティション全体を満たしているため、できません。あなたの関数はUSBにスムーズに書き込みますが、それは問題ではありません。 Windowsは通常、USBをパーティション化されていないストレージとして扱います。

+0

あなたの答えをありがとう! HxDを使用してドライブの変更を確認していますが、何も起こっていないことがわかります。さらに、WriteFileおよびReadFileは、0バイトの書き込み/読み出しバイトを返します。 それは正しいです:私はパーティションのセクションの量を増やすと、ファイルシステムは自動的にそのスペースを埋める?しかし、その後、Microsoftが「ファイルシステム空間外に書かれるセクタ」という意味は何ですか? マウントされたパーティションを使用するとスムーズに書き込めません。私はそれがロックされているかアンマウントされている場合にのみ書くことができます... 私は可視のパーティションに書き込むことができますか? – heyjohnnyfunt

関連する問題