@
完整更新日志:v0.5.9 → v0.5.10
🔒 WebAuthn/Passkey 不触发人脸(三层防线)
DLL 侧(分类 + debounce):
- 枚举事件 2250/2251 提前检测:弹窗前 1-2s,5s 窗口
ready-monitor需配合标题关键词:无关键词时保守返回 MonitorUnavailable,不假定为密码填充- 发 "run" 前 500ms debounce 轮询
is_webauthn_guard_active() - 发 "run" 紧前面加第二道 guard 复查,关闭 ~20ms 竞态
- broker 场景 hook 武装前多重 WebAuthn 复查(prepare 前后 + 循环内)
EXE 侧(事件监视 + 渲染):
- EVENT_QUERY XPath 格式修复:channel 路径不再嵌入查询,恢复
*[...]格式 - 2250 枚举事件渲染回退:缺失 TransactionId 时用最小 2 字段渲染,单事件失败不丢弃整批
- 近期枚举(5s TTL)计入
active_count - Condvar missed-wakeup 竞态修复
- broker_guard_prewarm_blocked 在 DLL 断开时清除
🔒 自动锁屏不误锁
- 当场检测:15 帧硬循环 → 10s deadline +
not_face_delay+ 传感器预热重试
⚡ Win+L 秒解锁
power_resume_requires_run在!is_camera_blocked()时释放预热抑制- prewarm_session_gate 配合 credential client 状态正确恢复
🌙 Modern Standby 摄像头阻断
- GUID_CONSOLE_DISPLAY_STATE 监听:屏幕关闭即阻断,不等待 PBT_APMSUSPEND
- 所有摄像头路径统一用
is_camera_blocked()(suspend + display 双重条件)
🧹 凭据清理完善
- KSP 私钥 + credentials.dat 元数据 + 包外备份 + PurgeRequested.flag
- 插件启动时检测 flag → DeleteAllPluginCredentials + ResetLocalCredentialsStore
- AppListBackup 磁贴清理:reg.exe 原始解析二进制值,空键删除
📊 仪表盘
- faceCount 改为响应式 computed
- 今日识别 3s 轮询刷新
- facesStore init() 幂等化(faceList 先清空再填充)
- passkey 版本号移出轮询循环
🛠 安装/部署
- NSIS CopyFiles 去 /SILENT,失败回退 REBOOTOK,关键文件复制失败弹窗报错
- install.log 审计日志(INSTLOG 宏)
- opencv/Server 部署:复制成功才删 resources 副本,禁止静默失败
- 日志 5MB 自动截断(AtomicBool CAS 防重入、UTF-8 边界对齐、后台线程 + TruncationGuard)
- CP DLL 部署后检测重启提示
🧹 CP DLL 残留清理
- NSIS 安装器:清理
.new文件先尝试直接删除,失败再用Delete /REBOOTOK(f040a3a) - 维护页面新增「清理 System32 旧版 DLL 残留(.new)」按钮(
214d81b) cleanup_stale_cp_dll同时清理.bak.old热替换残留文件(4eb863d)
🐛 Bug修复
- 编辑面容保存
targetId→editFaceData.id - EventLog 订阅无匹配 event ID 时不标 unhealthy
- 暂停/恢复状态 event-driven 替代轮询
- 凭据客户端断开时探测定时释放句柄
- 人脸录入模型提前卸载再重加载确保后端一致性
🏗 内部重构
request_auto_lock提取复用open_configured_camera+warm_up_camera统一 cancel 闭包- power_events 3 路状态(suspend + display + blocked)atomically derived
- unlock.log 日志截断不阻塞调用线程
完整对比: v0.5.9...v0.5.10
@