Repository navigation
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也做有界轮询。