Csharp/C#教程:如何逐位读取整个磁盘的内容分享


如何逐位读取整个磁盘的内容

我有一张闪存卡,我需要计算驱动器的整个内容的校验和。

如果我可以获得整个驱动器的流,我可以一点一点地阅读它。

有没有人知道是否有这样做的API?

到目前为止我看到的一切都要求我打开一个文件。

有没有办法一点一点地读取整个驱动器的内容?

如果要编写C#代码,则必须使用P / Invoke从磁盘读取数据(RAW访问)。

有没有办法一点一点地读取整个驱动器的内容?

您必须在驱动器 (闪存卡的逻辑表示,安装在其上的文件系统,由驱动器号指定)和磁盘 (闪存卡的物理表示,由磁盘编号指定)之间做出改变。

请参阅我之前的答案,了解如何从驱动器/磁盘读取RAW数据:

基本上,您首先需要磁盘/驱动器的句柄:

// For a DISK: IntPtr hDisk = CreateFile(string.Format("\\.\PhysicalDrive{0}", diskNumber), GenericRead, Read | Write, 0, OpenExisting, 0, IntPtr.Zero); // For a DRIVE IntPtr hDrive = NativeMethods.CreateFile( string.Format("\\.\{0}:", DriveLetter) GenericRead, Read | Write, IntPtr.Zero, OpenExisting, 0, IntPtr.Zero); 

然后使用SetFilePointerEx (这样你可以移动你想要读取的偏移量), ReadFile (填充从磁盘/驱动器读取的字节的缓冲区), CloseHandle (关闭由CreateFile打开的句柄)。

通过块读取磁盘/驱动器(基本上,从偏移“0”到偏移“磁盘/驱动器大小”的循环)。

重要的是(或ReadFile总是会失败): 读取块大小必须是磁盘扇区大小的倍数 (通常为512字节)。

我不确定在.NET是否有直接支持,但您可以使用Platform Invoke来调用Win32 API函数。 CreateFile()应该是你的起点,因为它允许你获得物理驱动器的句柄:

您可以使用CreateFile函数打开物理磁盘驱动器或卷,它返回可与DeviceIoControl函数一起使用的直接访问存储设备(DASD)句柄。 这使您可以直接访问磁盘或卷,例如分区表等磁盘元数据。

该文档告知您限制(例如要求管理权限)以及如何从卷号等获取物理驱动器号的提示。

“Stream”是一种抽象, 通常假设存在文件系统,因此从概念上讲它并不那么简单。

在Windows上,您可能希望从查看Windows Defragmentation API开始。 以下是我发现的一些链接:

上述就是C#学习教程:如何逐位读取整个磁盘的内容分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1011129.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐