Skip to content

FlashDir v3.5.3

Latest

Choose a tag to compare

@BlkSword BlkSword released this 13 Oct 09:39

FlashDir v3.5.3 Release Notes

装了 3.5.2 的请务必升级:3.5.2 在管理员环境下无法使用 MFT 直读,会一直回退目录遍历
(扫描明显变慢)。本版修复该回归,并修掉若干界面状态问题。

修复

  • 管理员下永远回退目录遍历(3.5.2 回归)
    FSCTL_GET_NTFS_FILE_RECORD 返回的记录通常已由文件系统处理过 update sequence,
    再跑 fixup 校验必然不匹配;3.5.1 及以前是忽略该返回值继续解析的。上一版把它改成硬错误后:
    $MFT 的 data runs 解析失败 → read_all_records 里 ? 直接返回错误 → 整个 MFT 扫描失败
    → 永远走目录遍历。现已恢复原行为(IOCTL 路径按原样解析,只记一次诊断日志),并新增
    带扇区大小兜底的 fixup(优先卷报告的扇区大小、在副本上验证,失败回退 512)。
    ReadFile 读 $MFT 数据流的 bulk 路径保留严格校验——那里拿到的是原始记录,fixup 必需。

  • 缓存的"上层推导"分支漏了 MFT 升级判断
    内存推导 / 磁盘推导两条分支此前直接返回,导致"非管理员时扫过的父目录,提权后进入其子目录"
    仍沿用遍历结果。现在四条缓存分支共用同一判定(且保持惰性,不给内存命中路径增加开卷探测)。

  • 未扫描时误报"目录遍历"
    状态栏的 MFT 指示此前只看上次扫描结果,而未扫描时它必然为 false,于是管理员一启动就被标成
    "目录遍历",看起来像提权没生效。现为三态:MFT 直读 / MFT 就绪(已提权、尚未扫描)/
    目录遍历,并各自给出说明性提示。

  • 「索引可能不完整」提示无法关闭
    新增「关闭」按钮:记录关闭时对应的盘集合,盘集合一旦变化会重新提示(既不顽固常驻,
    也不会把真实问题永久藏掉);条件真正清除时(重建索引成功后重新播种 USN 检查点)卡片仍自动消失。

  • 卷打开失败时的错误提示误导排查
    旧实现把所有失败都报成"需要管理员权限"(丢弃了 GetLastError),在已是管理员却因卷被
    独占/BitLocker 未解锁/ACL 拒绝等原因失败时会把排查引向提权。现在区分 ERROR_ACCESS_DENIED(5)
    与其它错误,并给出真实错误码与提示。

界面

  • 索引构建期间可见"进行中":状态栏显示呼吸状态点 +「扫描中 · 已用 Ns」,右下角进度卡显示
    已用时长。此前状态栏只按条目数判断,构建期条目数仍为 0 → 整个过程显示"未建立",建完直接跳成
    "N 项"(只有两态);且首次启动时后端"开始构建"事件可能早于前端注册监听而被丢弃,界面完全
    看不到构建发生——现改为 notLoaded 也做有界轮询。