# SmartCam Cleaner **v2** · 扫描 / 手动删除 / 拉黑持久化

> 作者：星陨 (Meteor) for MeteorVarg ｜ 2026-09-26
> 交叉编译：Linux (mingw-w64) → Windows x64 原生 PE，零第三方 DLL

---

## 一、v2 新增了什么

| 功能 | 说明 |
|---|---|
| 🚫 **拉黑名单** | 删掉后可以把设备"拉黑"，**1 小时 ~ 365 天**任选 |
| ⏱ **到期自动解除** | 时间一到自动失效，不用管 |
| 🔁 **后台自动执行** | 装个计划任务，**每 5 分钟**检查一次，拉黑的设备一露面就自动删掉（重启也有效） |
| ✋ **可提前解除** | 菜单 `b` 里随时 `d<序号>` 解除，或 `c` 全部清空 |
| ⚠️ **内置设备只提醒** | 系统类设备不拦你，但删前会额外问一句"是否承担风险" |

---

## 二、默认匹配关键词

```
smart-camara   smart-camera   smartcamara   smartcamera
smart cam      smartcam       智慧摄像机     智能摄像
```
兜底规则：名字里**同时**含 `smart` 和 `cam` 也算命中。

---

## 三、主菜单

```
  ============================================================
     SmartCam Cleaner  v2   ·   扫描 / 手动删除 / 拉黑
     星陨 (Meteor) for MeteorVarg
  ============================================================
   匹配关键词：smart-camara smart-camera ...
   风险提示：开启（内置/系统设备会额外询问）
   拉黑名单：2 条在用

  序号  状态   保护  已拉黑  设备名              类别          实例ID
  1     在场   锁    是      Smart-Camara        Bluetooth     BTHENUM\...

  操作：  1,2,3 = 删除指定序号    a = 全部    k = 换关键词
          b = 拉黑名单管理        r = 重新扫描  q = 退出
  >
```

| 输入 | 含义 |
|---|---|
| `1` / `1,3,5` | 选中这些序号（**仍逐个确认**） |
| `a` | 全部（**仍逐个确认**） |
| `k` | 换匹配关键词（回车恢复默认） |
| `b` | 拉黑名单管理 |
| `r` | 重新扫描 |
| `q` | 退出 |

---

## 四、删除流程（三道关，防手滑）

```
① 选中设备后……   【内置/系统设备】是否愿意承担风险继续？ (y/跳过)
② 最后确认：确定删除吗？ (y/跳过)
③ 删除成功 → 要不要把它拉黑（防止它自己回来）？(y/N)
     └─ y → 拉黑多久？ 1=1小时 2=6小时 3=1天 4=7天 5=30天 6=90天 7=180天 8=365天
                       也可以直接输入小时数（1 ~ 8760）
     └─ 首次拉黑会顺手问：要装后台任务吗？(y/N)
```

---

## 五、拉黑名单管理（菜单 `b`）

```
  ---------- 拉黑名单（2 条） ----------
   1    smart-camara         [Bluetooth]  剩余 29天0小时  (按名字匹配)
        实例：BTHENUM\DEV_001122334455
   2    smart cam            [System]     剩余 4小时59分
        实例：ACPI\XYZ

  操作： d<序号> = 解除（如 d2）   c = 全部清空
         t = 安装后台任务(每5分钟)  u = 卸载后台任务   q = 返回
```

拉黑记录存在 exe 同目录的 **`blacklist.tsv`**（纯文本，可直接看/手改/备份）：

```
# SmartCam Cleaner 拉黑名单  (until\tbyname\tname\tinst\tcls)
1792863314	1	smart-camara	BTHENUM\DEV_001122334455	Bluetooth
```
- 第 1 列 = 到期时间戳（Unix 秒）
- 第 2 列 = 是否"按名字匹配"（1=实例ID 或 名字命中都算）

---

## 六、后台自动清理（持久化的关键）

安装后会在任务计划里创建 **`SmartCamCleaner-Enforce`**：

```
schtasks /Create /TN "SmartCamCleaner-Enforce"
         /TR "\"<exe路径>\" --enforce"
         /SC MINUTE /MO 5 /RL HIGHEST /RU SYSTEM /F
```

- 每 **5 分钟**跑一次 `--enforce`（**完全静默**，不弹窗）
- `--enforce` 做的事：读名单 → 清掉过期的 → 扫描全部设备 → 命中且仍在有效期内就**自动删除** → 写日志
- 以 SYSTEM + 最高权限运行，**开机自启、重启依然有效**
- 卸载：菜单 `b` 里按 `u`，或 `SmartCamCleaner.exe --remove-task`

---

## 七、命令行参数

```bat
SmartCamCleaner.exe -s                    仅扫描并列出后退出
SmartCamCleaner.exe -k "你的关键词"         自定义匹配词
SmartCamCleaner.exe --present-only         只扫在场设备，忽略幽灵设备
SmartCamCleaner.exe --force                跳过"风险询问"那道（仍保留最终确认）
SmartCamCleaner.exe --blist                打印拉黑名单后退出
SmartCamCleaner.exe --enforce              后台静默模式：清理命中的拉黑设备（计划任务用）
SmartCamCleaner.exe --install-task         安装后台任务
SmartCamCleaner.exe --remove-task          卸载后台任务
```

---

## 八、真实效果说明（重要）

| 设备类型 | 删了之后会怎样 |
|---|---|
| 普通外设（USB 摄像头、蓝牙设备…） | 删掉后需**重新插拔 / 重新配对**才能再用；硬件不会损坏 |
| **拉黑期间** | 只要它再次出现，**5 分钟内会被自动删掉**，用不了 |
| 内置普通设备（内置摄像头/蓝牙/读卡器） | 一般**重启**就会被 Windows 自动识别装回 |
| 关键系统设备（磁盘控制器/芯片组/ACPI） | ⚠️ 有风险，可能要进安全模式修，工具只提醒不阻止 |

> 想让设备**彻底回不来**（连驱动包一起清）：光删设备不够，还需要 `pnputil /delete-driver`。
> 需要的话跟我说，我再加个 `--purge-driver` 开关 awa

---

## 九、文件清单

| 文件 | 说明 |
|---|---|
| `SmartCamCleaner.exe` | 成品（含 requireAdministrator 提权清单） |
| `smartcam.c` | 源码（C + Win32 SetupAPI） |
| `app.manifest` / `app.rc` | 提权清单 + UTF-8 代码页，编进 exe |
| `blacklist.tsv` | 运行时生成：拉黑名单 |
| `device_cleanup_log.txt` | 运行时生成：操作日志 |

## 十、自己重新编译

```bash
x86_64-w64-mingw32-windres app.rc -O coff -o app.res
x86_64-w64-mingw32-gcc -O2 -Wall -o SmartCamCleaner.exe \
    smartcam.c app.res -lsetupapi -lcfgmgr32 -lshell32 -static
```
