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

时间:2009-09-09 12:48:07

标签: c# disk

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

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

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

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

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

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