问题标签 [ntfs-mft]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2878 浏览

filesystems - 在 NTFS 中读取 MFT

在网上徘徊寻找如何读/写 MFT 的解释时,我发现了以下部分:( http://www.installsetupconfig.com/win32programming/1996%20AppE_apnilife.pdf )

如果 NtfsProtectSystemFiles 设置为 FALSE,则可以打开特殊文件。然而,尝试这样做有一些缺点:因为许多特殊文件在挂载卷时以特殊方式打开,它们不准备处理调用 ZwReadFile 产生的 IRP_MJ_READ 请求,并且系统如果收到这样的请求就会崩溃。这些特殊文件可以通过用 ZwCreateSection 和 ZwMapViewOfSection 映射特殊文件,然后读取映射的数据来读取。另一个问题是一些特殊文件没有准备好处理在关闭文件对象的最后一个句柄时生成的 IRP_MJ_CLEANUP 请求,如果收到这样的请求,系统就会崩溃。

  1. “他们没有准备好处理 IRP_MJ_READ 请求”是什么意思,需要什么样的准备?什么是 IRP_MJ_READ?
  2. “用 ZwCreateSection 和 ZwMapViewOfSection 映射特殊文件,然后读取映射的数据” 那如何解决问题?
  3. 这是什么意思“文件没有准备好处理在文件对象的最后一个句柄关闭时生成的 IRP_MJ_CLEANUP 请求”又是什么准备?什么是 IRP_MJ_CLEANUP?
  4. “将特殊文件的打开句柄复制到一个永不终止的进程中”这是如何解决问题的?
0 投票
1 回答
1553 浏览

c++ - VC++ - 如何获得在 NTFS 引导扇区上写入的权限?

我进行了很多搜索以获得对引导扇区(主文件表)的写访问权限。我使用CreateFile了带有写访问参数的函数,如GENERIC_WRITE. 然后用SetFilePointerandWriteFile来写一个特定的内存地址。但我总是得到的是System.AccessViolationException(Windows 7)。我在这里做错了吗?

我想知道是否有任何替代 CreateFile-WriteFile 函数来获得对引导扇区的 wrtie 访问权限?

或者我在想是否有任何方法可以使用中断服务程序在 VC++ (C++/Cli) 中的特定磁盘扇区上写入?

0 投票
0 回答
949 浏览

delphi - 在 Delphi 中实现变更日志

我正在寻求使用更改日志而不是ReadDirectoryChangesW跟踪我的 delphi XE2 应用程序中的更改(至于原因:ReadDirectoryChangesW 不那么可靠

我在 delphi/pascal 中能找到的最接近的是Delphi MFT/Journal helpers,它包含两个帕斯卡单位:uMFT.pasuDevNotification.pas

上面的代码处理 MFT(实际上非​​常好),但没有任何变化日志

我还发现了这个 C# 代码,它似乎可以做我想做的事,只是它在 C# 中

我的问题是:任何人都知道Delphi XE2代码(或如何转换 C# 代码)以与更改日志交互和/或查询?

正如我所说,我的目标是替换ReadDirectoryChangesW,因此我最终需要与更改日志进行交互,以便在文件系统发生更改时通知我

0 投票
1 回答
1078 浏览

delphi - 在 Delphi 中实施变更日志(第 2 步)

继续我之前的问题,我可以使用这个delphi 单元来使用这个EnumMFTEntries() 函数实现疯狂的 FAST 驱动器扫描,但是我在执行以下任务时遇到了麻烦:

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

在阅读了该函数以及 StCroixSkipper 的 USN Journal Explorer(在 C# 中)之后,我调整了这个损坏的例程。EnumMFTEntries()

由于某种原因,报告的文件名总是#0


任务 #2:限制扫描到某个文件夹?

如果我没记错的话,似乎可以通过在EnumMFTEntries()函数中定义来部分地做到这一点,但目前尚不清楚如何做到这一点。StartUsn

任务#3:获取文件名的完整路径?

例如,EnumMFTEntries()总是只返回名称及其父文件夹参考号,不清楚获取完整路径的最快方法是什么。


我希望我没有问太多,这些任务真的是息息相关的,我真的希望社区在这里帮助Delphi开发人员轻松实现疯狂的快速文件夹扫描。尽管它很有用,但变更日志/MFT 是最有趣但被遗忘的技术之一。这必须改变!

0 投票
2 回答
4686 浏览

block - 如何从 NTFS 文件系统上的 MFT 获取文件的 LBA(逻辑块寻址)?

我访问了 $MFT 文件并提取了文件属性。

给定来自 MFT 的文件属性,如何从 NTFS 文件系统上的 MFT 记录中获取文件的 LBA?

要计算 LBA,我知道文件的簇数。

可以用簇数来计算吗?

0 投票
1 回答
1882 浏览

file - NTFS - 文件记录大小

我想知道每个 MFT 记录的实际(磁盘)大小。由于每个 MFT 记录的集群数是在引导扇区中设置的,我猜每个集群的大小都相同。

但是,每个记录头都存储一个附加值:它的Allocated size(在 0x1C 处)。据我观察,该值始终等于存储在引导扇区中的值。

这两者是否有可能不同(以及何时)?如果没有,Allocated size每条记录中的价值有点浪费,对吧?

0 投票
2 回答
2223 浏览

windows - 如何获取最后一个 NTFS MFT 记录?

我正在编写一个实用程序来解析 NTFS 中的 MFT。到目前为止,我已经编写了获取 1024 字节 MFT 记录并遍历其属性的代码。据我所知,MFT 从记录号 0x23 开始将记录分配给用户文件,所以我从 0x23 循环到 N 条记录。我想知道如何获得MFT的最后一条记录?是否有某种结束标记?我如何知道某条记录是否是最后一条记录,以便我可以停止循环遍历 MFT 记录。

任何帮助,将不胜感激。

0 投票
1 回答
538 浏览

c - 卷过滤器驱动程序不监视某些系统文件

我正在开发一个高容量过滤器驱动程序,该驱动程序监视扇区上的写入/修改,然后在我自己的位图中设置该扇区的相应位。我使用 WDK 中提供的 diskperf 示例作为基础。

大多数情况下,一个扇区上的所有写入/修改都会被监控并设置相应的位。我的问题是我的过滤器驱动程序无法监控某些扇区,例如:$MFT、$MFTMirr 等。

但它能够跟踪 $LogFile 的扇区。谁能告诉我需要设置什么样的属性或标志来处理所有类型的写入 IO,以便我的过滤器驱动程序可以跟踪所有扇区,包括系统文件扇区,如 $MFT 和此类文件?

任何形式的帮助将不胜感激。提前致谢。

0 投票
1 回答
86 浏览

ntfs - Can a mft_reference correspond to two different files at different time?

I am working on parsing USN Journal files now, and what I know is that in USN Journal log entry, there is a mft_reference field, it references the corresponding FileRecord in MFT table.

After a period of time, the USN Journal files may accumulate quite lot of file change records, such as file adding, file modifying, file deleting.

If I just get a mft_reference number(64 bits integer) mft_refer_1 at the very beginning of the USN Journal file, and get another mft_reference number mft_refer_2 at the end of the USN Journal file, and they are equal in value, mft_refer_1 == mft_refer_2 Can I say the two journal records are specifying the same file?

What I am not quite sure is if an later added FileRecord will replace the position of a former deleted FileRecord.

Thank you in advance!

0 投票
1 回答
2141 浏览

windows - 如何打开 NTFS 元数据/系统文件:$LogFile、$Volume、$Bitmap?

我在 64 位 Windows 7 上运行。我想获取与某些 NTFS 系统文件关联的 FileID。其中一些(“$Mft”、“$MftMirr”)我可以打开,但其他一些(“$LogFile”和“$Bitmap”)因“拒绝访问”错误或无效参数(“$Volume”)而失败。我曾尝试以管理员身份执行此操作并作为本地服务运行,但它们仍然失败。我正在使用以下内容:

我也设置了以下权限(我知道这有点过头了,但我不知道哪个会起作用):SE_TCB_NAME、SE_DEBUG_NAME、SE_SECURITY_NAME、SE_BACKUP_NAME、SE_RESTORE_NAME、SE_MANAGE_VOLUME_NAME