8

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

我一直试图弄清楚如何用 C# 编写自己的文档,但我发现的文档很少,而且只涉及 C++ API。

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

4

3 回答 3

9

pinvoke.net拥有一组托管代码包装器,用于基本上所有 Win32 API,包括那些可以与磁盘管理器服务对话并执行低级内核/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 设备上使用 C# 版本的QueryDosDevice 背景,它们的命名转换和与 O/S 对象的关系可以在 Mark Russinovich 的“Windows Internals”中找到。

于 2011-12-07T12:44:15.287 回答