Files
MemRelay/projects/ea207d36-693c-4349-b3c8-7c40c8c889f5/curated/WinUnLock 项目关键决策汇总.md
T

5.1 KiB
Raw Blame History

title, type, permalink, stable_id, scope, project_id, workspace_type, usage_profile_id, preference_context, document_type, revision, source_memory_ids, source_checkpoint_ids, source_file_ids, source_git_commit, source_git_commits, source_agent_sync_ids, model_connection, model_name, source_count, source_revisions, source_dispositions, cited_source_ids, job_cited_source_ids, conflicts, supersedes, preferences, source_cursor, source_hash, prompt_version, schema_version, curation_job_id, created_at, updated_at, tags
title type permalink stable_id scope project_id workspace_type usage_profile_id preference_context document_type revision source_memory_ids source_checkpoint_ids source_file_ids source_git_commit source_git_commits source_agent_sync_ids model_connection model_name source_count source_revisions source_dispositions cited_source_ids job_cited_source_ids conflicts supersedes preferences source_cursor source_hash prompt_version schema_version curation_job_id created_at updated_at tags
WinUnLock 项目关键决策汇总 curated main/projects/ea207d36-693c-4349-b3c8-7c40c8c889f5/curated/win-un-lock-项目关键决策汇总 937e5888-0a9b-45ee-9312-6e110ef1619b project ea207d36-693c-4349-b3c8-7c40c8c889f5 development null development decisions 1
67499b3a-97a6-4982-9c16-4afaa59d45f3
d821d390-15d1-484a-98e1-6d9656f69bfe
ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
null
Sub2API openai/gpt-oss-120b 15
memory:d821d390-15d1-484a-98e1-6d9656f69bfe memory:67499b3a-97a6-4982-9c16-4afaa59d45f3 memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
1 1 1
processed unchanged unsupported skipped
15 0 0 0
memory:d821d390-15d1-484a-98e1-6d9656f69bfe
memory:67499b3a-97a6-4982-9c16-4afaa59d45f3
memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
memory:d821d390-15d1-484a-98e1-6d9656f69bfe
memory:67499b3a-97a6-4982-9c16-4afaa59d45f3
memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
92 4ba0814abe7570a9e62a54340ca352579628d92bc49f330cda285b38a0442283 2026-08-12.3 3 745df395-ccaa-47e8-ae23-c469ef26706f 2026-08-19T10:01:20.395598+00:00 2026-08-19T10:01:20.396107+00:00
decision
architecture
security
implementation

WinUnLock 项目关键决策

以下决策直接来源于项目记忆(memory)文档,按重要性分组。

1. 项目整体技术方向

  • 决定 实现一个工程化的 Credential Provider DLL + 命名管道 + 定时解锁客户端(保留会话、不重启)。放弃 AutoAdminLogon 重启方案,因为需保留当前会话。来源: [memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20]

2. Rust 工作区结构与关键参数

  • Rust 工作区划分为四个 crate:
    • common(管道协议、配置、DPAPI 包装)
    • provider(cdylib,生成 Credential Provider COM DLL)
    • client(binary,负责每日定时读取凭据并通过管道发送)
    • setup(binary,交互式设置账户名/密码并使用 DPAPI 加密)
  • 附加 PowerShell 安装/卸载脚本与中文 README。来源: [memory:d821d390-15d1-484a-98e1-6d9656f69bfe]
  • 唯一 CLSID:{E9C67B30-B120-4838-A5A3-FBC2DE03C532}(新生成,避免冲突)。
  • 命名管道:\\.\pipe\WinUnLock
  • 数据目录:%PROGRAMDATA%\WinUnLock\(包含 config.toml, cred.bin(DPAPI 加密凭据),日志子目录 logs\provider.log、logs\client.log)。
  • 已验证的依赖组合:Rust edition 2024,windows = 0.62.2,windows-core = 0.62.2。

3. 管道协议与安全措施

  • 管道协议 v1(小端):
    • magic u32 = 0x554E4C4B ('UNLK')
    • version u32 = 1
    • user_len u32 + UTF‑16LE 字符串
    • pass_len u32 + UTF‑16LE 字符串
    • domain_len u32 + UTF‑16LE 字符串
    • 长度上限检查,读取完毕后 zeroize 内存。
  • 数据流:系统计划任务(SYSTEM, Highest) → client.exe 读取 cred.bin(DPAPI LocalMachine 解密) → 通过命名管道发送凭据(带重试) → Provider 线程接收 → CredentialsChanged 通知 LogonUI → GetSerialization 调用 CredPackAuthenticationBufferW 序列化 → LSA 验证 → 解锁恢复原桌面。
  • 安全恢复注意:如果 Credential Provider 注册错误导致登录卡死,需要进入 WinRE/安全模式手动删除注册表中的 CLSID 项恢复。来源: [memory:d821d390-15d1-484a-98e1-6d9656f69bfe]

4. 原型验证经验教训(来自 Gitee winlogon 项目)

  • 可成功编译生成 winlogon.dll(约 256 KB),导出 DllGetClassObject、DllCanUnloadNow、DllMain,说明 Rust cdylib 自动导出。来源: [memory:67499b3a-97a6-4982-9c16-4afaa59d45f3]
  • 缺陷 & 教训:
    1. DllMain 里硬编码日志路径 D:\log\winlogon.log 并使用 .expect(),导致加载时在不存在路径下 panic → 系统卡住。决策:在实现中绝不在 DllMain 中 panic,避免硬编码日志路径。
    2. README 内容占位、命名不规范、死代码。决策:提供完整、中文、使用说明的 README,移除死代码。
    3. 必须使用 长度前缀协议、ACL 拒绝远程访问、仅在解锁场景激活、密码使用后 zeroize。来源: [memory:67499b3a-97a6-4982-9c16-4afaa59d45f3]

5. 开发与测试约束

  • 协作约定:AI 负责完整实现(多 crate、安装/卸载脚本、中文文档),用户在虚拟机中验证后再部署到生产机器。
  • 禁止 在开发机器上实际执行 regsvr32、修改注册表或创建真实计划任务,只做构建、导出检查等只读验证。来源: [memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20]

本决策文档仅引用了项目记忆来源,未添加任何未在来源中出现的事实。