【问题标题】:Direct disk access in windows (C#)Windows 中的直接磁盘访问 (C#)
【发布时间】:2010-11-26 20:03:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# disk


    【解决方案1】:

    pinvoke.net 拥有一系列托管代码包装器,适用于基本上所有 Win32 API,包括那些可以与磁盘管理器服务对话并执行低级内核/IO 的代码。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-05
        • 2016-12-10
        • 2021-08-09
        • 2011-12-07
        • 2012-05-21
        • 2010-11-01
        • 2015-01-19
        • 2011-02-11
        • 1970-01-01
        相关资源
        最近更新 更多