ディスクとの間でデータを直接読み書きできるようにしたい (つまり、セクター/クラスター レベル) が、Windows でこれを行うための適切なツールをまだ見つけていません。
C# で独自のコードを作成する方法を見つけようとしていますが、見つけたドキュメントはまばらで、C++ API しか扱っていません。
C#でドライブに直接読み書きする最良の方法は何ですか? (または、ドライブから直接読み書きできるツールを誰かに勧めてもらえますか?)
pinvoke.netには、基本的にすべての Win32 API 用のマネージ コード ラッパーのコレクションがあり、Disk Manager サービスと通信して低レベルのカーネル/IO を実行できるものも含まれます。
正直なところ、このコードを C# で書きたい場合は、おそらくPlatform Invokeを見る必要があります。これにより、アンマネージド プラットフォーム API と対話できます。これは、これまでに見つけた情報の大半です :-)
この質問は、.NET でのブロック デバイス書き込みに関連する用語の検索で出てくるので、元の回答をいくつかの直接リンクで飾りたいと思います。
まず、PInvoke を CreateFile に使用して、ファイル ハンドルを取得します。
PInvoke メソッドは、CreateFile を .NET 環境にインポートするために使用されます。MSDN には、SafeFileHandleに関する議論の例があります。CreateFile のパラメーターとリターン コードを c# 型で作成する場合は、PInvoke にいくつかの例があります。
ただし、物理デバイスまたはそのボリュームのどちらに書き込むかを決定する必要があります。ボリュームは、デバイス上のパーティションに対応します。たとえば、「\.\PhysicalDrive0」は物理デバイスで、「\.\C:」はボリュームです。
利用可能な Win32 デバイスの詳細については、これらの Win32 デバイスでQueryDosDevice Background の C# バージョンを使用してください。名前の変換と O/S オブジェクトとの関係については、Mark Russinovich による「Windows Internals」を参照してください。