8

ディスクとの間でデータを直接読み書きできるようにしたい (つまり、セクター/クラスター レベル) が、Windows でこれを行うための適切なツールをまだ見つけていません。

C# で独自のコードを作成する方法を見つけようとしていますが、見つけたドキュメントはまばらで、C++ API しか扱っていません。

C#でドライブに直接読み書きする最良の方法は何ですか? (または、ドライブから直接読み書きできるツールを誰かに勧めてもらえますか?)

4

3 に答える 3

9

pinvoke.netには、基本的にすべての Win32 API 用のマネージ コード ラッパーのコレクションがあり、Disk Manager サービスと通信して低レベルのカーネル/IO を実行できるものも含まれます。

于 2009-09-09T12:55:28.733 に答える
2

正直なところ、このコードを C# で書きたい場合は、おそらくPlatform Invokeを見る必要があります。これにより、アンマネージド プラットフォーム API と対話できます。これは、これまでに見つけた情報の大半です :-)

于 2009-09-09T12:52:12.473 に答える
1

この質問は、.NET でのブロック デバイス書き込みに関連する用語の検索で出てくるので、元の回答をいくつかの直接リンクで飾りたいと思います。

まず、PInvoke を CreateFile に使用して、ファイル ハンドルを取得します。

PInvoke メソッドは、CreateFile を .NET 環境にインポートするために使用されます。MSDN には、SafeFileHandleに関する議論の例があります。CreateFile のパラメーターとリターン コードを c# 型で作成する場合は、PInvoke にいくつかの例があります。

ただし、物理デバイスまたはそのボリュームのどちらに書き込むかを決定する必要があります。ボリュームは、デバイス上のパーティションに対応します。たとえば、「\.\PhysicalDrive0」は物理デバイスで、「\.\C:」はボリュームです。

利用可能な Win32 デバイスの詳細については、これらの Win32 デバイスでQueryDosDevice Background の C# バージョンを使用してください。名前の変換と O/S オブジェクトとの関係については、Mark Russinovich による「Windows Internals」を参照してください。

于 2011-12-07T12:44:15.287 に答える