Windows中的直接磁盘访问(C#)

我希望能够直接从磁盘读取和写入数据(即在扇区/集群级别),但我还没有找到适合在Windows下执行此操作的工具。

我一直试图弄清楚如何在C#中编写自己的文档,但我发现的文档很稀疏,只处理C ++ API。

什么是直接在C#中读取/写入驱动器的最佳方式? (或者任何人都可以向我推荐一种允许我直接从驱动器读/写的工具吗?)

pinvoke.net有一组基本上所有Win32 API的托管代码包装器,包括可以与磁盘管理器服务通信并执行低级内核/ IO的那些。

老实说,如果你想用C#编写这段代码,你可能需要查看Platform Invoke 。 它允许您与非托管平台API进行交互,您提到的是迄今为止您发现的大部分信息:-)

这个问题出现在搜索与.NET中块设备写入相关的术语上,因此我想用一些直接链接来修饰原始答案。

首先,您将使用PInvoke来创建FileFile来获取文件句柄。

PInvoke方法用于将CreateFile导入.NET环境。 MSDN在讨论SafeFileHandle时有一个例子。 如果要为CreateFile的参数和返回代码创建c#类型,PInvoke上有一些示例

但是,您需要决定是要写入物理设备还是写入卷。 卷对应于设备上的分区。 例如“\。\ PhysicalDrive0”是物理设备,而“\。\ C:”是音量。

有关可用Win32设备的详细信息,请在这些Win32设备上使用C#版本的QueryDosDevice Background,它们的命名转换以及与O / S对象的关系可以在Mark Russinovich的“Windows Internals”中找到。