我希望能够直接在磁盘上读取和写入数据(即在扇区/集群级别),但我还没有找到合适的工具在Windows下执行此操作。
我一直在试图弄清楚如何在C#中编写自己的文档,但我发现的文档很少,只处理C ++ API。
在C#中直接读取/写入驱动器的最佳方式是什么? (或者任何人都可以向我推荐一种允许我直接从驱动器读/写的工具吗?)
答案 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”中找到。