chore: 导入旧记忆备份供恢复
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
---
|
||||
title: WinUnLock 项目关键决策汇总
|
||||
type: curated
|
||||
permalink: main/projects/ea207d36-693c-4349-b3c8-7c40c8c889f5/curated/win-un-lock-项目关键决策汇总
|
||||
stable_id: 937e5888-0a9b-45ee-9312-6e110ef1619b
|
||||
scope: project
|
||||
project_id: ea207d36-693c-4349-b3c8-7c40c8c889f5
|
||||
workspace_type: development
|
||||
usage_profile_id: null
|
||||
preference_context: development
|
||||
document_type: decisions
|
||||
revision: 1
|
||||
source_memory_ids:
|
||||
- 67499b3a-97a6-4982-9c16-4afaa59d45f3
|
||||
- d821d390-15d1-484a-98e1-6d9656f69bfe
|
||||
- ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
|
||||
source_checkpoint_ids: []
|
||||
source_file_ids: []
|
||||
source_git_commit: null
|
||||
source_git_commits: []
|
||||
source_agent_sync_ids: []
|
||||
model_connection: Sub2API
|
||||
model_name: openai/gpt-oss-120b
|
||||
source_count: 15
|
||||
source_revisions:
|
||||
memory:d821d390-15d1-484a-98e1-6d9656f69bfe: '1'
|
||||
memory:67499b3a-97a6-4982-9c16-4afaa59d45f3: '1'
|
||||
memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20: '1'
|
||||
source_dispositions:
|
||||
processed: 15
|
||||
unchanged: 0
|
||||
unsupported: 0
|
||||
skipped: 0
|
||||
cited_source_ids:
|
||||
- memory:d821d390-15d1-484a-98e1-6d9656f69bfe
|
||||
- memory:67499b3a-97a6-4982-9c16-4afaa59d45f3
|
||||
- memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
|
||||
job_cited_source_ids:
|
||||
- memory:d821d390-15d1-484a-98e1-6d9656f69bfe
|
||||
- memory:67499b3a-97a6-4982-9c16-4afaa59d45f3
|
||||
- memory:ffcc24b6-2d1a-46e8-bceb-49e187dd0c20
|
||||
conflicts: []
|
||||
supersedes: []
|
||||
preferences: []
|
||||
source_cursor: 92
|
||||
source_hash: 4ba0814abe7570a9e62a54340ca352579628d92bc49f330cda285b38a0442283
|
||||
prompt_version: 2026-08-12.3
|
||||
schema_version: '3'
|
||||
curation_job_id: 745df395-ccaa-47e8-ae23-c469ef26706f
|
||||
created_at: '2026-08-19T10:01:20.395598+00:00'
|
||||
updated_at: '2026-08-19T10:01:20.396107+00:00'
|
||||
tags:
|
||||
- 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]*
|
||||
|
||||
---
|
||||
*本决策文档仅引用了项目记忆来源,未添加任何未在来源中出现的事实。*
|
||||
Reference in New Issue
Block a user