Csharp/C#教程:从NTFS-MFT参考编号获取文件信息分享


从NTFS-MFT参考编号获取文件信息

在我的C#应用​​程序中,我已经有办法检查文件系统,但我想利用从主文件表(MFT)读取,因为它更快。 我理解1)它是一个专有规范,因此如有更改,恕不另行通知; 2)只有在应用程序在管理权限下运行时才能访问它。

我设法通过此代码读取主文件表。 从MFT查询中,我得到一个文件名和一个所谓的文件引用号。 我找不到的是如何转换到.NET FileInfo对象,甚至转换到Windows API文件句柄,以便我可以获得有关文件/文件夹的更多信息,例如:文件大小,完整路径,日期邮票等

当您潜伏在MFT中时,可以使用两种简单的方法来打开文件 – 您可以使用该文件引用号(Vista和更高版本)调用OpenFileByID ,或者您可以通过遍历列表来构建完全限定的文件名在读取MFT时生成,然后使用汇编名称调用CreateFile 。

您希望将CreateFile或OpenFileByID的句柄转换为SafeFileHandle:

[DllImport( "kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode )] internal static extern SafeFileHandle CreateFile( string lpFileName, EFileAccess dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile ); [DllImport( "kernel32.dll", SetLastError = true )] internal static extern SafeFileHandle OpenFileById( IntPtr volumeHandle, ref FileIdDescriptor lpFileId, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwFlagsAndAttributes ); 

一旦你有SafeFileHandle(并且你已经检查它是有效的),你可以将它传递给FileStream构造函数并像正常一样读/写文件。

每个文件都在MFT中表示,但有一些警告。 例如,单个文件可以在多个位置的文件层次结构中,但是对于所有人来说都有一个MFT条目 – 这些是所谓的硬链接(它们不是副本 – 有多个入口点到文件 – 头痛比比皆是)。 有成千上万的这些。 有用于查询硬链接的API,但它变得很难看。

上述就是C#学习教程:从NTFS-MFT参考编号获取文件信息分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

ctvol管理联系方式QQ:251552304

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

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

精彩推荐