Skip to content

Releases: YanGLweI/WinSLA

WinSLA v2.2.8

Choose a tag to compare

@YanGLweI YanGLweI released this 10 Sep 13:37

WinSLA v2.2.8

发布日期: 2026-09-10


🛡️ 兼容性说明

向后兼容性

✅ 完全向后兼容

  • 安装路径、注册表位置无变化
  • 配置文件格式无变化
  • 现有功能不受影响
  • 可平滑升级无需额外操作

环境要求

  • ✅ Windows 10/11 64 位
  • ✅ Rust toolchain v1.70+ (当前 v1.97.1)
  • ✅ NSIS (makensis) v3.x

📋 升级指南

适用对象

所有正在使用 WinSLA v2.2.6 或 v2.2.7 的用户

建议操作

  1. 备份当前配置(可选):

    Copy-Item "$env:LOCALAPPDATA\WinSLA\winsla.db" "backup\winsla-backup.db"
  2. 卸载旧版本:

    # 通过控制面板或通过安装程序自带的卸载程序
  3. 安装新版本:

  4. 验证安装:

    • 打开 WinSLA 管理端
    • 检查仪表盘 → 服务状态 → 应显示 "版本 v2.2.8"

🔗 相关链接


📜 许可证

MIT License - © 2026 ylw


如有任何问题,请提交 Issue 或在讨论区留言。

WinSLA v2.2.7 - Critical Bug Fixes

Choose a tag to compare

@YanGLweI YanGLweI released this 09 Sep 11:18

WinSLA v2.2.7 发布说明

🎯 版本概述

本次发布包含 5 个关键 Bug 修复,所有问题均已通过虚拟机实机测试和浏览器自动化测试验证。

✅ 已修复问题

Bug #1 - 应急账号提醒时机优化

  • 问题: 创建主账号后立即弹出应急提醒对话框,打断配置流程
  • 修复: 延迟到第一条完整配对关系配置完成(至少添加一个审批人)后才提示
  • 影响: 改善用户体验,避免初次设置时过早中断

Bug #2 - JSON 反序列化错误

  • 问题: 切换开关状态时报错 invalid type: boolean 'false', expected i64
  • 根因: 前端发送布尔值而后端期望 i64 (0/1)
  • 修复: 更新前端使用 native fetch API 发送整数 0/1 而非 true/false
  • 影响: Switch Toggle 功能正常工作,控制台无错误

Bug #3 - 标签页切换自发消息

  • 问题: 在 Dashboard 和 Pair Rules 页面间切换时会无缘无故弹出成功/错误消息
  • 修复: 移除不必要的状态更新并优化 load() 函数行为
  • 影响: UI 更干净,无弹窗干扰

Bug #4 - 删除最后一条配对后自动启用默认 Tile

  • 问题: 删除所有配对规则会保持 Windows 默认 Tile 关闭,可能导致用户被锁死
  • 修复: 实现 accounts.length === 0 时的自动 API 调用来启用默认 Tile
  • 影响: 防止系统锁死场景,保持登录可访问性

Bug #5 - 新增第二个主账号时审批人对话框报错 422

  • 问题: 已有配对关系时创建第二个主账号,提交审批人时出现 HTTP 422 错误
  • 根因: 后端响应结构在第一对配对(嵌套)和后续配对(直接)间不同
  • 修复: 正确识别并处理两种响应类型
  • 影响: 可成功创建多个带审批人的主账号

🔧 变更内容

  • 管理端 package.json 版本号从 2.2.0 升级到 2.2.7
  • NSIS 安装程序脚本更新至 v2.2.7
  • 优化 handleAddAccount 函数正确处理嵌套响应

🧪 测试验证

所有修复均通过以下测试验证:

  • ✅ 浏览器自动化测试 (Chrome DevTools MCP)
  • ✅ 端到端场景测试
  • ✅ Test-Win 虚拟机实机安装测试
  • ✅ 多个边缘场景测试

📦 安装方式

下载 WinSLA-v2.2.7-Setup.exe 并以管理员身份运行。安装程序将:

  • 复制所有二进制文件到 C:\Program Files\WinSLA
  • 注册 Credential Provider CLSID
  • 安装并启动 Windows 服务
  • 创建桌面和开始菜单快捷方式

⚠️ 重要提示

此版本修改了系统登录流程。生产环境部署前请务必在虚拟机中测试。确保准备好应急恢复脚本 (scripts\emergency-recovery.ps1)。


有关更多详情,请查看仓库中的 CHANGELOG.md 文件。

WinSLA v2.2.5

Choose a tag to compare

@YanGLweI YanGLweI released this 03 Aug 15:16

v2.2.5 更新内容

新增:密码过期自定义模态对话框(替代动态 Tile 方案)

经多轮实测,LogonUI 在序列化阶段存在硬性限制(CredentialsChanged 返回 E_ELEMENT_NOT_FOUND、缓存初始字段布局、CPGSR_RETURN_NO_CREDENTIAL_FINISHED 跳过状态消息),Tile 内动态切换字段方案不可行。本版本改为在密码过期时立即弹出自定义模态对话框:

  • 主账号 / 审批人任一账号密码过期,点击提交后立即弹出「修改密码」对话框(不依赖 LogonUI 刷新)
  • 支持取消 / ESC / 关闭按钮返回登录界面
  • 改密成功后新密码自动填入对应账号密码字段,再次点击提交即可登录
  • 错误提示(旧密码不正确 / 两次输入不一致 / 域密码策略不符合等)在对话框内显示
  • 登录界面正常模式无任何密码修改字段,双控 / 应急登录流程不受影响

修复

  • 修复修改密码弹窗在部分环境(高 DPI / RDP 会话)下高度不足、底部按钮被裁切的问题:
    • AdjustWindowRectEx 按客户区尺寸反算窗口外框,保证所有控件完整显示
    • 全部控件坐标按系统 DPI 缩放,100% / 125% / 150% 缩放下布局正常

安装包

  • WinSLA-v2.2.5-Setup.exe(约 5.4 MB),以管理员身份运行

WinSLA v2.2.3

Choose a tag to compare

@YanGLweI YanGLweI released this 30 Jul 16:42

WinSLA v2.2.3

修复

  • 登录界面 UX 回归修复:默认 Tile 恢复为「双控登录」,图标正常显示。ICredentialProviderCredential2 的 QueryInterface 现按场景区分(登录场景不暴露该接口),GetUserSid 仅双控 Tile 返回被锁用户 SID,避免应急 Tile 被 LogonUI 误选为解锁界面默认。
  • 本地锁屏解锁修复:双控 Tile 在本地 Win+L 解锁场景现已可正常解锁(CredPack 明文序列化 + 被锁会话 LogonId 修正 + SID 匹配)。

已知平台限制与优雅降级

  • RDP 会话解锁降级:经系统性实测(Windows 11 25H2 / Build 26100,6 轮序列化变量实验 + 安全审计取证),Windows 在 RDP 会话解锁场景对第三方 Credential Provider 存在未文档化的区别对待:内置提供程序的凭据以 LogonType=7 (Unlock) 提交 LSA 并成功;第三方提供程序的提交走 RemoteInteractive 路径,在 LSA 入口即失败(0xC000006D / 0xC00000E5),且不产生任何审计事件。缓冲格式、认证包(Negotiate/Kerberos 直选)、LogonId、SID 匹配等全部变量均已排除——与 CP 代码无关。
  • 行为变化:RDP 会话的锁屏解锁(断线重连 / 会话内 Win+L)自动隐藏双控 Tile,解锁界面显示 Windows 原生密码登录(单因素),不再出现"提交必失败"的死锁。
  • 不受影响的场景:本地登录、本地 Win+L 解锁、RDP 全新登录(无既有会话)均为完整双控。

⚠️ 安全建议

需要使用双控登录的敏感区域,建议不要启用远程桌面——物理控制台的登录与解锁均为完整双控;RDP 已建立会话的解锁受 Windows 平台限制只能单因素。双控语义仍覆盖「进入会话」的全部路径(本地登录、RDP 全新登录)。

安装

下载 WinSLA-v2.2.3-Setup.exe 以管理员身份运行。升级安装前建议阅读 README 的应急恢复章节。

WinSLA v2.2.1

Choose a tag to compare

@YanGLweI YanGLweI released this 30 Jul 11:35

WinSLA v2.2.1

修复

  • 修复 RDP 远程桌面场景双控登录失败:凭证提供程序(CP)序列化登录凭据时,改为严格使用服务端验证通过后返回的 canonical 登录名(DOMAIN\user / MACHINE\user),禁止在 CP 侧剥离或重建域名前缀。根治以下场景的 LSA 登录拒绝:
    • 工作组机器被错误拼接 WORKGROUP\user 前缀
    • .\user 显式本地账号被强制改写为域前缀
    • UPN 格式(user@domain.com)被拆解重建
    • 可信域账号域名被替换为本机所在域
    • 裸名本地账号被误判为域账号

变更

  • 认证协议扩展:AuthResponse::Success 携带 canonical_username 字段;AuthRequest 新增 logon_source 字段(console / rdp-session-N),复用审计记录的客户端主机列,无数据库结构变更
  • 服务端新增 canonical 化:裸名按 LogonUserW 查找顺序解析(先本机 SAM,后加入域前缀);NetGetJoinInformation 严格检查 buf_type,工作组环境不再误拼域名
  • CP 诊断增强:登录失败时 Tile 直接显示 NTSTATUS 中文原因(账号不存在 / 密码错误 / 工作站限制 / 登录类型未授权等);trace 日志增加会话 ID、远程标记(session=N remote=true/false)与 canonical 名,便于远程排障
  • 双端 com_types.rs 协议定义保持一致

升级说明

  • 安装升级后请执行 scripts\flush-cp-cache.ps1 并重启系统,确保 LogonUI 加载新版 DLL
  • 旧版本配对关系与审计数据完整保留,无需重新配置

WinSLA v2.2.0

Choose a tag to compare

@YanGLweI YanGLweI released this 30 Jul 03:41

WinSLA v2.2.0

新增功能

  • 仪表盘新增"近 7 天登录趋势"柱状图(ECharts)
  • 仪表盘新增"登录状态趋势"环形饼图,柔和配色(浅蓝 #5dade2 成功 / 浅红 #ec7063 失败),底部图例标注,hover 显示百分比
  • 新增每日统计 API:GET /api/stats/daily

修复

  • 修复每日统计 SQL 参数绑定错误('-?1 days' 字符串字面量不替换参数导致近7天查询无数据)
  • 修复前端 getDailyStats 未导入导致柱状图不渲染(ReferenceError)
  • 修复柱状图 X 轴日期旋转逻辑:固定横向显示,月/日格式(如 7/30)
  • 修复全项目版本号不一致问题(管理端"服务状态"此前显示旧版本)

变更

  • 全项目版本号统一为 2.2.0(Cargo.toml × 4、package.json、package-lock.json、tauri.conf.json、README badge、NSIS 脚本、VERSIONINFO 资源、UAC manifest)
  • 柱状图标题居中、grid 布局紧凑化
  • 移除仪表盘调试日志

安装

下载 WinSLA-v2.2.0-Setup.exe,以管理员身份运行安装。

WinSLA v2.1.5 - 应急处理指南与弹窗自动聚焦优化

Choose a tag to compare

@YanGLweI YanGLweI released this 29 Jul 02:30

WinSLA v2.1.5 更新内容

🎯 核心功能改进

1. 应急处理指南完善

  • 新增完整的应急处理方式文档(README.md)
    • 服务进程崩溃恢复步骤
    • 服务卡死强制重启方法
    • AD/LDAP 网络不可达时的离线缓存使用
    • 无法进入桌面时的安全模式恢复
    • 完全卸载流程
  • 提供详细的命令行操作示例
  • 包含调试与诊断技巧

2. 用户界面优化

  • 弹窗自动聚焦功能
    • 新增配对规则对话框自动聚焦到主账号用户名输入框
    • 新增应急账号对话框自动聚焦到用户名输入框
    • 使用 ref + nextTick() + setTimeout() 确保正确聚焦

3. 策略管理增强

  • 应急原因策略动态加载
    • 管理端保存策略时即时写入注册表
    • CP 端动态读取 EmergencyRequiresReason 策略
    • 支持运行时切换是否需要填写应急原因
    • 默认启用应急原因必填(EmergencyRequiresReason=1)

🔧 技术改进

  • 代码质量
    • 修复 Settings.vue 硬编码默认值问题
    • 优化表单数据加载逻辑(从数据库动态加载)
    • 改进组件 ref 使用方式

📦 安装包信息

  • 文件名: WinSLA-v2.1.5-Setup.exe
  • 大小: 约 4.8 MB
  • 支持系统: Windows 10/11 x64
  • 安装方式: 管理员权限运行

⚠️ 重要提醒

  1. 安装前请阅读 应急处理指南
  2. 建议在虚拟机中测试后再部署到生产环境
  3. 安装后需要重启系统以应用更改
  4. 确保有恢复手段(安全模式 + 应急卸载脚本)

📝 升级说明

从 v2.1.4 升级:

  1. 卸载旧版本(控制面板 → 程序和功能)
  2. 重启计算机
  3. 安装新版本
  4. 再次重启计算机

🐛 已知问题

  • 无

📚 相关文档


完整变更日志: v2.1.4...v2.1.5

WinSLA v2.1.4

Choose a tag to compare

@YanGLweI YanGLweI released this 28 Jul 14:51

WinSLA v2.1.4

版本亮点

本版本引入 DefaultTile 与配对规则联动安全策略,解决"未配置配对规则时禁用默认 Tile 导致无法登录系统"的锁死风险,并修复三项测试中发现的问题。

新增功能

DefaultTile 与配对规则联动

  • 安装后默认启用 Windows 默认登录 Tile,保障未配置配对规则时可正常登录
  • 添加第一条配对规则后自动禁用默认 Tile,并弹窗引导配置应急账号
  • 删除最后一条配对规则后自动恢复默认 Tile,防止意外锁死
  • 无配对规则时手动禁用默认 Tile,需二次确认(明确提示"WinSLA 服务异常可能导致无法登录系统"风险)

安全修复

  • 修复策略默认值不一致:win_service 与管理端的 default_tile_enabled 默认值不一致(false vs true),导致全新安装后策略同步线程将注册表覆盖为禁用,管理端显示与实际行为割裂
  • 修复双控登录绕过:无配对规则时任意两个有效域账号即可通过 WinSLA 双控登录,现改为拒绝并提示"系统未配置配对规则,请使用 Windows 默认登录方式"
  • 修复开关状态未恢复:策略配置中取消禁用默认 Tile 后,开关停留在禁用位置(ElMessageBox confirm 取消分支未正确处理)

改进

  • 最大重试次数默认值由 3 次调整为 5 次(管理端、服务端、前端表单五处统一)
  • 应急账号对话框支持回车键验证账号,与配对规则页面交互一致

安装包

  • WinSLA-v2.1.4-Setup.exe — NSIS 安装程序(含 Credential Provider、认证服务、管理端)

升级说明

  • 建议先卸载旧版本再安装;卸载不会删除共享数据库,已保存的策略与配对规则将保留
  • 新默认值(默认 Tile 启用、重试 5 次)仅对全新安装或从未保存过策略的环境生效

WinSLA v2.1.0

Choose a tag to compare

@YanGLweI YanGLweI released this 28 Jul 12:31

WinSLA v2.1.0

Windows 双账号认证系统 - 默认登录 Tile 策略控制正式版

新功能

默认登录 Tile 隐藏策略

  • 通过 Credential Provider Filter 实现 Windows 默认登录 Tile 的隐藏/显示控制
  • 管理端"系统设置"页面新增"默认登录 Tile"开关(默认关闭,即隐藏 Windows 默认登录方式)
  • 安装时自动写入默认策略注册表,安装后立即生效,无需手动配置
  • 策略保存即时生效:管理端保存时同时写入数据库和注册表

管理端 UAC 自动提权

  • 管理端启动时自动弹出 UAC 授权框,用户确认后以管理员权限运行
  • 确保策略修改能立即写入系统注册表
  • 修复管理端 exe 资源段缺失问题(版本信息、图标、manifest 正确嵌入)

安装说明

  1. 下载 WinSLA-v2.1.0-Setup.exe
  2. 以管理员身份运行安装程序
  3. 安装完成后重启系统或注销
  4. 登录界面将只显示 WinSLA 双控登录和应急登录(默认隐藏 Windows 默认登录 Tile)

组件说明

  • DualAuthCP.dll - Credential Provider(含 Filter,隐藏默认 Tile)
  • winsla-service.exe - 后台认证服务(策略同步、审计日志)
  • winsla-management.exe - 管理端(UAC 自动提权,策略即时生效)

验证方式

  • 登录界面默认只显示双控登录和应急登录 Tile
  • 管理端开启"默认登录 Tile"后,锁屏即可看到 Windows 默认登录方式
  • 注册表验证:HKLM\SOFTWARE\WinSLA\Policy\DefaultTileEnabled(0=隐藏,1=显示)

WinSLA v2.0.9 - 安全审查修复

Choose a tag to compare

@YanGLweI YanGLweI released this 28 Jul 03:44

WinSLA v2.0.9 - 安全审查修复

🔒 安全加固

本版本基于代码审查四维标准进行全面安全加固:

1. 明文密码内存处理与清理 ✅

  • 使用 zeroize::Zeroizing<Vec<u16>> 包装所有敏感字段
  • 涉及字段:user_a_pass、user_b_pass、emergency_reason、serialized_pass
  • 析构时自动零化内存,防止敏感数据残留

2. 锁定计数并发安全 ✅

  • 添加 SQLite busy_timeout(5s) 防止并发访问 "database is locked" 错误
  • 增强 login_attempts 表操作日志(显示更新行数,便于调试)

3. COM vtable 字段索引正确性 ✅

  • 验证通过,无需修改
  • 20字段 CredentialVTable、11字段 ProviderVTable、独立 SetUserArrayStub 均正确

4. 应急路由授权匹配边界 ✅

  • 细化审计结果码:
    • emergency_denied_policy - 策略禁用
    • emergency_denied_unauthorized - 未授权账号
    • emergency_denied - 其他拒绝原因

📦 安装包

WinSLA-v2.0.9-Setup.exe (4.98 MB)

🔄 升级说明

  1. 卸载旧版本(控制面板 → 程序和功能)
  2. 安装 v2.0.9
  3. 重启计算机使 Credential Provider 生效

⚠️ 重要提示

  • 安装后会影响系统登录流程,请确保在测试环境中操作
  • 域账号验证需使用 DOMAIN\user 或 UPN 格式输入
  • 裸用户名走本地 SAM 验证

📋 完整变更日志

  • cp_provider: 添加 zeroize 依赖,敏感字段内存零化
  • win_service: SQLite busy_timeout、审计日志细化、锁定计数日志增强
  • installer: 版本号升级至 2.0.9

完整代码变更: v2.0.8...v2.0.9