标签: ntfs-mft

我们如何通过C#访问MFT

我需要在我的.net应用程序中使用C#访问Windows MFT(主文件表).
我搜索了这个,但没有找到任何好结果.我一直在搜索过去2天的信息,但一直无法找到相同的信息.

我不是在寻找确切的代码来做同样的事情,我只是在寻找可以让我开始的一些信息.

我唯一能够弄清楚的是我必须使用P/Invoke.
我想知道我将用于访问MFT的功能.
如果您能够提供一些代码示例,那就太棒了.

.net c# disk ntfs-mft

12
推荐指数
2
解决办法
1万
查看次数

在Delphi中实现Change Journal(第2步)

继续我之前的问题,我能够使用这个delphi单元使用这个EnumMFTEntries()函数实现疯狂的FAST驱动器扫描,但是我无法完成以下任务:

任务1:查询change journal以获取新修改的文​​件(更改,重命名,删除等...)

在阅读了该函数以及 StCroixSkipper的USN Journal Explorer(在C#中)后,我修改了这个破坏的例程.EnumMFTEntries()

由于某种原因,报告的文件名始终为#0

function EnumUsnEntries(ARootHandle : Cardinal; AMFTEnumBuff : Pointer; EnumCallBack : TMFTEnumCallback) : Boolean;
var
   P         : Pointer;
   UsnEnum   : Pointer;
   BytesRet  : Cardinal;

   PUSN           : PUSNRecord;
   ReadUSN        : TReadUSNJournalData;
   PReadUSN       : PReadUSNJournalData;
   UsnJournalData : TUSNJournalData;
   BUF_SIZE       : Integer;
begin
     Result            := False;
     if (ARootHandle = INVALID_HANDLE_VALUE) OR (AMFTEnumBuff = nil) then
        Exit;

     QueryUSNJournal(ARootHandle, UsnJournalData);
     with ReadUSN do
     begin …
Run Code Online (Sandbox Code Playgroud)

delphi ntfs delphi-xe2 ntfs-mft

7
推荐指数
1
解决办法
909
查看次数

NTFS $MFT 文件可以有子记录吗?

我正在编写一些代码来解析 NTFS 卷中磁盘上的 MFT。这很简单,但一个特殊的角落案例引起了我的注意,我在互联网上的任何地方都找不到明确的答案。

对于 NTFS 中的普通文件,如果文件的属性多于单个记录的容量(例如,如果文件有很多硬链接,则有很多 $FILE_NAME 属性,或者很多$DATA 属性(如果它有许多备用数据流)。

参考编号为 0 的 $MFT 文件保存 MFT 本身的数据运行。通常它是一个没有孩子的单一记录。$MFT 文件是否有可能有子记录?如果可能的话,你怎么知道在哪里可以找到它们?这些子记录是否必须以非常低的参考号存储,以便您可以可靠地获取它们,而不必已经解析 $MFT 以知道它们在磁盘上的位置?

ntfs file ntfs-mft

6
推荐指数
1
解决办法
1082
查看次数

如何获取 USN 日志查询的完整路径?

我正在尝试通过 MSDN 上的示例(https://msdn.microsoft.com/en-us/library/windows/desktop/aa365736%28v=vs.85%29.aspx)了解如何在为了跟踪 NTFS 驱动器上的文件更改。示例代码运行良好。

但是,在此示例代码中,USN_RECORD 结构仅返回文件引用号和文件名。它不会返回文件的完整路径。有谁知道如何查询 USN 日志以返回完整路径?或者有没有办法从文件参考号中获取完整路径?

谢谢。

c++ winapi msdn visual-studio ntfs-mft

6
推荐指数
1
解决办法
2831
查看次数

主文件表清理实用程序?

任何人都可以推荐一个MFT清理工具吗?我希望在我的MFT中恢复曾经存在但已被删除为"原始"状态的文件条目,并将条目清零.

windows filesystems ntfs ntfs-mft

5
推荐指数
1
解决办法
2万
查看次数

在NTFS卷上快速查找一组文件名,最好通过其MFT

我正在编写一个工具,可以找到适用于Mac和Windows的iTunes资料库的丢失文件.在Mac上,我可以通过使用精彩的"CatalogSearch"功能命名来快速查找文件.

但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?).

经过一些谷歌搜索,我了解到有一些工具(如TFind,Everything)直接读取NTFS目录并扫描它以按名称查找文件.

我想做同样的事情,但不必从头开始(虽然我过去写了很多磁盘工具,但我从来没有精力去挖掘NTFS).

我想知道是否有现成的库,可能是.dll,它会给我这个搜索功能:传入一个文件名,回到它的路径.

或者,Windows索引服务怎么样?至少当我在最近安装的XP Home系统上尝试此操作时," 开始"菜单下的" 搜索"操作实际上会扫描所有目录,这表明它没有完整的数据库.由于我根本不是Windows用户,我想知道为什么这不起作用.

最后,我需要的完整解决方案是:我有一个要查找的文件名列表,我需要搜索整个磁盘的代码(或者使用数据库)来一次性获取所有结果.例如,搜索不应该为我正在查找的每个文件启动新的完整扫描.这就是为什么我认为MFT方式是最优的,因为它可以快速迭代所有名称,将每个名称与我的列表进行比较.

windows filesystems ntfs ntfs-mft

5
推荐指数
1
解决办法
2663
查看次数

转储 $mft 文件的内容

对于我正在做的一些商业项目,我需要能够读取 $mft 文件中存储的实际数据。

我找到了一个可以提供帮助的gpl 库,但由于它是 gpl,我无法将其集成到我的代码中。

有人可以向我指出一个我可以使用的项目/或者向我指出相关的 Windows API(不需要 1000 行代码来实现的东西)

顺便说一句,为什么 Windows 不允许我直接读取 mft 文件?(通过创建文件和读取方法,如果我想毁掉我的驱动器,那是我的事而不是女士的事)。

谢谢。

windows kernel ntfs ntfs-mft

5
推荐指数
1
解决办法
6014
查看次数

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

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

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

.net c# fileinfo ntfs-mft

5
推荐指数
1
解决办法
2146
查看次数

加速 NTFS 文件枚举(使用 FSCTL_ENUM_USN_DATA 和 NTFS MFT / USN 日志)

我通过查看 NTFS MFT / USN 日志来枚举 NTFS 硬盘驱动器分区的文件:

HANDLE hDrive = CreateFile(szVolumePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
DWORD cb = 0;

MFT_ENUM_DATA med = { 0 };
med.StartFileReferenceNumber = 0;
med.LowUsn = 0;
med.HighUsn = MAXLONGLONG;      // no change in perf if I use med.HighUsn = ujd.NextUsn; where "USN_JOURNAL_DATA ujd" is loaded before

unsigned char pData[sizeof(DWORDLONG) + 0x10000] = { 0 }; // 64 kB

while (DeviceIoControl(hDrive, FSCTL_ENUM_USN_DATA, &med, sizeof(med), pData, sizeof(pData), &cb, NULL))
{
        med.StartFileReferenceNumber = …
Run Code Online (Sandbox Code Playgroud)

c++ performance winapi ntfs ntfs-mft

5
推荐指数
0
解决办法
1536
查看次数

NTFS是否存储每个inode/文件的哈希值或CRC32,如何访问它?

我知道如何读取文件,将这些字节传递给哈希算法(例如 MD5SUM、SHA256 或 CRC32),并获取哈希值。

在这里我问的问题略有不同:

每次我们在 NTFS 分区上写入/修改文件时,它是否会重新计算哈希或 CRC32 并将此信息存储在 NTFS 元数据/FAT/MFT(主文件表)中(我不记得确切的名称)?

注意:重要的是我只想读取存储在文件系统中的存储哈希/CRC(即读取几个字节,最多应该是几毫秒),而不是重新计算哈希(这将花费很多秒来计算 10 GB 文件)。


如果是这样,如何使用 Python 访问特定文件的 CRC 或哈希值?有没有类似的东西:

import ntfsutil
ntfsutil.getCRC('d:/big50GBfile.dat')  # done in < 10 ms
Run Code Online (Sandbox Code Playgroud)

python windows filesystems ntfs ntfs-mft

5
推荐指数
0
解决办法
2278
查看次数

短文件可以使用更多的MFT记录而不是更长的文件吗?

我们知道,在NTFS中,我们将元数据存储在称为MFT记录(包含一些运行)的结构中.

这本书问下一个问题

可以是短文件使用的MFT记录多于较长的文件吗?

我认为答案是否定的 - 因为如果我们有一个文件,其元数据超过一个MFT的大小,那么我们必须使用运行.还有其他建议吗?

ntfs file ntfs-mft

1
推荐指数
1
解决办法
2545
查看次数