我希望能够直接从磁盘读取和写入数据(即在扇区/群集级别),但我还没有找到合适的工具在 Windows 下执行此操作。
我一直试图弄清楚如何用 C# 编写自己的文档,但我发现的文档很少,而且只涉及 C++ API。
在 C# 中直接读取/写入驱动器的最佳方式是什么?(或者任何人都可以向我推荐一个允许我直接从驱动器读取/写入的工具吗?)
pinvoke.net拥有一组托管代码包装器,用于基本上所有 Win32 API,包括那些可以与磁盘管理器服务对话并执行低级内核/IO 的代码包装器。
老实说,如果您想用 C# 编写此代码,您可能需要查看Platform Invoke 。它允许您与非托管平台 API 进行交互,您提到的是到目前为止您找到的大部分信息 :-)
这个问题是在搜索与.NET 中的块设备写入相关的术语时出现的,所以我想用一些直接链接来修饰原始答案。
首先,您将使用 PInvoke 到 CreateFile 来获取文件句柄。
PInvoke 方法用于将 CreateFile 导入 .NET 环境。MSDN 在他们讨论SafeFileHandle时有一个示例。如果要为 CreateFile 的参数和返回码创建 c# 类型,PInvoke 上有一些示例
但是,您需要决定是要写入物理设备还是其上的卷。卷对应于设备上的分区。例如“\.\PhysicalDrive0”是物理设备,而“\.\C:”是卷。
有关可用 Win32 设备的详细信息,请在这些 Win32 设备上使用 C# 版本的QueryDosDevice 背景,它们的命名转换和与 O/S 对象的关系可以在 Mark Russinovich 的“Windows Internals”中找到。