C:\Windows\System32\cleanmgr.exe 传统磁盘清理工具;独立 EXE 可执行程序。 核心定位:基于VolumeCaches注册表扩展模型,扫描各类系统缓存垃圾;支持 Sagerun 自动化配置; cleanmgr.exe 和 Win11 设置页「存储‑临时文件」(storusage.dll+storagesense.dll)完全独立的栈,规则库隔离,互不调用

Windows11「设置‑系统‑存储‑临时文件」深度拆解

区分:UI 为SystemSettings.exe,实际业务逻辑由 StorageSense(存储感知)组件实现,和传统cleanmgr.exe磁盘清理为两套组件,清理集合不完全等价。

一、底层原理

整体架构:UI‑后台分离,白名单路径 + 文件元数据过滤模型

  1. 设置页面仅做:磁盘占用扫描统计、分类展示、用户勾选选项;本身不执行删除操作;用户点击「删除文件」,将勾选策略下发给 storagesense.dll 执行器。
  2. 核心规则:基于系统内置白名单路径清单,扫描预定义目录;结合文件属性(FILE_ATTRIBUTE_TEMPORARY)、文件占用锁状态、文件修改时间做过滤判断。
  3. 文件过滤逻辑:
    • 跳过被进程占用锁定的文件(不杀进程、不强制解锁,直接跳过)
    • 跳过系统受保护路径、权限拒绝访问的目录
    • 用户勾选分类才执行对应删除;部分类别文件直接永久删除,不进入回收站博客园。
  4. 两大运行模式
    • 手动模式:用户在临时文件页面勾选,点击删除,同步触发一次清理任务。
    • 自动模式(存储感知):计划任务触发,读取注册表策略,后台静默执行清理博客园。

本质属于事后清理机制:只删除已经生成好的临时文件,无法拦截应用程序产生新临时文件。

二、依赖文件

组件 文件名 作用
设置 UI SystemSettings.exe 设置‑系统‑存储图形界面;做扫描展示、接收用户勾选,不负责删除逻辑博客园。
核心业务库 storagesense.dll 存储感知核心实现:目录遍历、规则过滤、文件删除、统计更新、日志输出博客园。
传统兼容工具 cleanmgr.exe 旧版磁盘清理;VolumeCaches 注册表定义清理项;与存储感知是两套独立组件,清理项集合不完全重合。
计划任务载体 任务:\Microsoft\Windows\StorageSense\StorageSenseTask 存储感知后台调度触发器,实现定时 / 磁盘低空间条件唤醒后台任务博客园。

三、依赖关系

3.1 注册表依赖

  1. 用户配置:HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense

存储开关、自动清理周期、各类清理项启用状态、文件保留天数;组策略可覆盖该配置博客园。

  1. 机器全局策略:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense
  2. cleanmgr 独立规则库:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches

⚠️StorageSense 不读取 VolumeCaches;该注册表仅给旧版 cleanmgr 使用,二者规则库隔离。

3.2 环境变量依赖

  • %TEMP%、%TMP% 用户临时目录;%SystemRoot%\Temp系统临时目录;

如果环境变量被篡改指向无效路径,扫描统计异常,清理失效。

3.3 系统服务依赖

  • 依赖文件系统 API、NTFS 权限子系统;
  • 扫描旧版 Windows 安装Windows.old依赖 Windows 更新相关组件;
  • 不依赖第三方服务;第三方杀毒 / EDR 可以拦截文件删除行为,造成 “显示可清理,删除后空间不变”。

3.4 依赖数据来源(扫描的典型白名单路径)

  1. 用户临时:%LOCALAPPDATA%\Temp
  2. 系统临时:C:\Windows\Temp
  3. Windows 更新缓存、交付优化文件、DirectX 着色器缓存、缩略图缓存、系统错误转储、日志目录、Windows.old旧系统目录、下载文件夹(可选)、回收站(可选)。

重要:第三方软件私有缓存目录不在白名单,不会被扫描清理。

四、逻辑链路

4.1 手动清理完整链路(设置‑临时文件页面点击删除)

用户打开设置 → SystemSettings.exe调用存储统计接口
→ 扫描预定义白名单目录,统计每一类可清理文件大小,展示UI
→ 用户勾选清理类别,点击【删除文件】
→ UI把勾选参数下发 storagesense.dll
→ storagesense.dll加载规则
→ 遍历白名单目录 → 过滤:保护文件/被占用文件/权限不足路径
→ 对匹配项执行删除;部分文件永久删除,部分走回收站逻辑
→ 记录执行日志;刷新磁盘占用缓存;返回执行结果给设置UI

被占用文件直接跳过,不终止进程,现象:清理完再次刷新,又看到同样临时文件。

4.2 自动流水线(存储感知后台自动执行)

触发条件:磁盘空间不足 / 定时周期 → 任务计划程序唤醒StorageSenseTask任务
→ 读取HKCU注册表的用户策略配置
→ storagesense.dll执行扫描‑过滤‑删除逻辑
→ 输出日志;更新存储统计;无弹窗UI,后台静默运行

五、配套链

  1. 上层 UI 配套:SystemSettings.exe(设置);与存储感知 COM 接口交互。
  2. 调度配套:任务计划程序(Task Scheduler)实现自动触发。
  3. 统计配套:系统存储统计组件,用于展示各类磁盘占用。
  4. 日志配套:事件查看器 → Applications and Services Logs → Microsoft‑Windows‑StorageSense,可排查跳过文件、执行失败原因。
  5. 互补配套工具
    • cleanmgr.exe传统磁盘清理:VolumeCaches 规则库,部分系统深度清理项(WinSxS 组件清理)仅 cleanmgr 具备;
    • DISM:用于组件存储清理,不属于临时文件清理;
  6. 组策略配套:可域环境批量管控存储感知开关、清理策略。

六、边界(约束、坑点、失效边界)

6.1 扫描范围边界

  1. 只扫描系统内置白名单路径;第三方应用私有缓存目录不会扫描清理;软件自己的缓存需要软件内部清除博客园。
  2. 默认仅处理系统盘 C 盘;其他数据盘不会执行临时文件自动清理。
  3. 不扫描、不触碰用户文档、桌面等业务数据目录。

6.2 文件删除边界

  1. 被进程锁定占用的临时文件直接跳过,不会强制杀进程删除;表现为清理完刷新又出现相同条目。
  2. 部分类别文件为直接永久删除,不进回收站;下载文件夹、回收站属于可勾选高危项,勾选后会真实删除用户资料。
  3. Windows.old旧系统安装包删除之后,丧失回退上一版 Windows 能力。
  4. 权限边界:普通用户权限无法访问部分系统受保护目录,该类目录内容直接跳过;需要管理员权限才能完整清理全部系统临时目录。

6.3 功能边界(与 cleanmgr 关键区别)

  1. StorageSense(设置临时文件)不读取VolumeCaches注册表,两套规则相互独立,可清理项目不完全对等。
  2. 存储感知不能做 WinSxS 组件深度清理;该能力属于 cleanmgr / DISM。
  3. UI 页面仅统计,UI 损坏不代表后台清理组件损坏;现象:页面能看到大小,点删除无效果。

6.4 业务逻辑边界

  1. 仅事后清理;不能阻止程序生成新临时文件,应用疯狂写临时文件会很快再次占满磁盘。
  2. 多用户隔离:存储感知策略按每个用户配置;A 用户的存储感知配置不会影响 B 用户;系统级临时目录会被所有用户扫描。

6.5 外部干扰边界

EDR / 杀毒软件的文件防护、文件过滤驱动拦截删除操作;出现统计显示有大量可清理空间,但删除后磁盘空间几乎不释放。

七、自动化

7.1 调用存储感知 COM 接口触发手动执行(PowerShell)

# 直接触发一次存储感知执行(等同于UI点立即运行)
Invoke‑CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense

7.2 通过计划任务触发

schtasks /run /tn "\Microsoft\Windows\StorageSense\StorageSenseTask"

注意:该任务以当前登录用户上下文运行,非系统账户。

7.3 传统 cleanmgr 自动化(两套不同组件,用于对比)

::预配置方案编号1,执行静默清理
cleanmgr /sagerun:1

7.4 排查:读取存储感知事件日志

Get‑WinEvent -LogName Microsoft‑Windows‑StorageSense/Operational | Select‑Object TimeCreated,Id,Message | Sort‑Object TimeCreated -Descending

7.5 组策略批量管控

路径:计算机配置 / 用户配置 → 管理模板 → 系统 → 存储感知;可批量开关、配置自动清理周期。

运维提示:企业环境,不要把存储感知自动清理下载文件夹开启,存在误删除业务资料风险。

八、关键现象速查

  1. 清理完又看到一堆临时文件:大概率文件被进程占用,storagesense 直接跳过。
  2. UI 显示大量可清理,删除后空间几乎不变:EDR 拦截;或大量文件处于占用状态。
  3. 某些缓存类别不在设置页面出现:属于第三方私有缓存,不在系统白名单。

storagesense.dll 深度解构分析

文件路径:C:\Windows\System32\storagesense.dll;Windows10 1709 + 引入,Windows11 核心组件;COM 进程内组件(In‑Proc Server),无独立 exe,被宿主进程加载执行;实现存储感知 StorageSense 全部扫描、策略过滤、文件删除、统计、日志逻辑;设置‑系统‑存储‑临时文件后台执行引擎。

一、底层原理

  1. 组件模型:COM In‑Proc DLL 无独立可执行程序,由不同宿主进程加载:
  • UI 路径:SystemSettings.exe(设置)加载,响应用户手动点击 “删除文件”;
  • 定时后台路径:任务计划程序StorageSenseTask宿主加载 DLL,后台自动执行清理。

不是 Windows 系统服务(无 SVC 服务注册),靠任务计划调度用户上下文执行。

  1. 内部三大核心引擎
  • 策略解析引擎:读取注册表用户 / 机器策略;解析清理白名单路径集合、保留天数阈值、启用 / 禁用项;
  • 文件扫描过滤引擎:遍历预定义目录;判断文件属性FILE_ATTRIBUTE_TEMPORARY、文件占用状态、最后访问 / 修改时间、ACL 访问权限;遇到被占用文件直接跳过,不终止进程、不强制解锁;
  • 文件操作执行引擎:调用 Win32 API DeleteFileW;区分 “永久删除”、移入回收站;更新磁盘占用统计;输出 ETW 事件日志。
  1. 设计范式:白名单驱动、保守安全优先
  • 只扫描系统内置固定白名单目录;不会全盘扫描磁盘;第三方软件缓存目录不在内置白名单内;
  • 多道保护:跳过受保护系统目录、权限拒绝目录、锁定占用文件;
  • 用户上下文运行:以当前登录用户权限执行,非 SYSTEM 权限;只能访问该用户可访问路径;系统级目录部分操作需要管理员权限;
  • 和传统cleanmgr.exe完全隔离:不读取 VolumeCaches 注册表项,两套独立规则库,清理集合不互通Microsoft ...。

本质:事后清理组件;只删除已生成垃圾文件;不能拦截程序生成临时文件。

二、依赖文件

文件 角色说明
storagesense.dll 主 COM 组件本体,核心业务逻辑
SettingsHandlers_StorageSense.dll 设置 UI 层处理适配器,SystemSettings.exe 调用的 UI 桥接层
ext‑ms‑win‑storage‑sense‑l1‑2‑0.dll StorageSense Win32 API 集,上层调用入口抽象层
kernel32.dll / advapi32.dll 文件系统 API、注册表读取、权限、时间 API
ole32.dll COM 组件加载、对象实例化基础库
storusage.dll 磁盘占用统计、存储用量上报组件
taskschd.dll 任务计划程序调度(后台自动模式)

不依赖:cleanmgr.exe;不依赖任何第三方服务。

三、依赖关系

3.1 COM 注册依赖(注册表 CLSID)

HKCR\CLSID\{StorageSense COM‑CLSID}\InprocServer32 指向storagesense.dll,线程模型Apartment;COM 注册损坏,表现为任务计划执行报错 “类未注册 0x80040154”。

3.2 策略注册表依赖

  1. 用户策略(每个用户独立,最重要) HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense

存储:开关状态、各类清理项启用标记、文件保留天数阈值、OneDrive 本地文件脱机策略;按用户隔离,A 用户配置不影响 B 用户。

  1. 机器全局策略(组策略覆盖源) HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense

组策略模板会改写该分支,强制覆盖用户配置。

⚠️ 不读取 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches(该键仅供 cleanmgr 使用)。

3.3 环境变量依赖

依赖系统环境变量:%TEMP%、%TMP%、%SystemRoot%;环境变量篡改指向无效路径,会造成扫描统计异常、清理失效。

3.4 宿主进程依赖

  1. 手动模式宿主:SystemSettings.exe;
  2. 自动后台模式宿主:任务计划项 \Microsoft\Windows\StorageSense\StorageSenseTask;在当前登录用户安全上下文运行,不是 SYSTEM 账户;未登录用户会话,任务不会执行Microsoft ...。

3.5 文件系统与外部干扰依赖

  1. 依赖 NTFS 文件 API;依赖读取文件元数据(修改时间、属性);
  2. EDR / 杀毒微过滤驱动可以拦截DeleteFileW调用;现象:UI 显示可释放空间,执行后磁盘空间几乎不变。

3.6 日志输出依赖

ETW 日志通道:Microsoft‑Windows‑StorageSense/Operational;记录扫描条目、跳过原因、删除成功 / 失败、错误码;排错核心数据源。

四、逻辑链路(两套执行链路)

链路 A|手动触发(设置 UI 点击删除文件)

SystemSettings.exe (设置UI)
  →加载 SettingsHandlers_StorageSense.dll
    →COM实例化 storagesense.dll 对象
      →storagesense.dll:加载HKCU用户策略 + 内置白名单
      →执行目录扫描;统计每一类文件大小,回传给UI展示
      [用户勾选清理项,点击删除文件]
      →传入勾选的分类掩码参数给storagesense.dll
      →策略过滤引擎筛选待删除文件集合
      →遍历文件:判断占用锁、权限、时间条件
      →Win32 DeleteFile / SHFileOperation(回收站逻辑)执行删除
      →写ETW事件日志;更新存储统计
    →返回执行结果给SystemSettings.exe刷新UI

链路 B|自动后台流水线(存储感知定时 / 低磁盘触发)

任务计划程序触发 StorageSenseTask
  →当前登录用户上下文,加载 storagesense.dll COM对象
    →读取HKCU注册表完整自动策略(保留天数、触发阈值)
    →读取磁盘空闲百分比,判断是否满足触发条件
    →扫描白名单目录,应用时间阈值过滤(如回收站超过30天)
    →执行删除;OneDrive文件执行“转为仅联机”,不物理删除
    →输出ETW日志;无GUI弹窗,后台静默执行

关键分支判断逻辑在 DLL 内部: if 文件被进程占用 → 直接跳过,不处理 if 访问被 ACL 拒绝 → 跳过 if 命中系统保护路径 → 跳过

五、配套链

  1. 上层 UI 配套SystemSettings.exe + SettingsHandlers_StorageSense.dll:仅做展示与参数下发,本身不实现任何删除逻辑。
  2. 调度配套 Task Scheduler 任务:\Microsoft\Windows\StorageSense\StorageSenseTask;提供定时、磁盘低水位触发唤醒能力。
  3. 统计配套storusage.dll:磁盘占用统计组件,为 UI 提供占用大小数据。
  4. 日志排错配套 事件日志:Microsoft‑Windows‑StorageSense/Operational;记录跳过原因(文件锁定、拒绝访问等)。
  5. 组策略配套 组策略模板:计算机配置 / 用户配置‑管理模板‑系统‑存储感知;可批量强制开关、强制清理策略。
  6. 互补配套(区分,非本 DLL 组件)
  • cleanmgr.exe:旧版磁盘清理,VolumeCaches 规则库;可做 WinSxS 深度清理;storagesense.dll 不调用它;
  • DISM:组件存储清理,完全独立组件。

六、边界(约束、坑、失效边界)

6.1 权限边界

  1. DLL 运行于当前登录用户权限上下文,不是 SYSTEM;只能访问该用户有权限的目录;系统目录部分文件因权限不足直接跳过;
  2. 多用户系统:每个用户拥有独立 HKCU 策略;storagesense.dll 执行时只处理当前用户的临时目录;不会扫描其他用户配置目录。

6.2 磁盘边界

  1. 仅处理系统盘 C 盘;不会自动扫描 D/E 等数据盘;其他盘临时文件不会被 storagesense.dll 清理Microsoft ...。

6.3 文件处理边界

  1. 不杀进程,被占用 / 锁定文件直接跳过;现象:清理完成刷新页面,临时文件再次出现;
  2. 部分类别永久删除,不进回收站;回收站 / 下载文件夹为可选开启项;企业环境严禁默认开启下载文件夹清理,存在业务资料误删风险;
  3. 白名单限制:第三方软件私有缓存目录不在内置白名单,完全不扫描;无法清理浏览器第三方缓存、软件私有 cache。

6.4 与 cleanmgr 边界

storagesense.dll 完全不读取 VolumeCaches;部分旧版系统清理项(WinSxS 深度组件清理)不在 storagesense 能力范围,只能由 cleanmgr / DISM 完成。

6.5 COM 组件故障边界

  1. CLSID 注册表损坏:任务计划运行报 0x80040154 Class not registered;手动 UI 路径也异常;
  2. 文件损坏:SFC 可修复 sfc /scanfile=c:\windows\system32\storagesense.dll。

6.6 触发运行边界

后台任务必须存在已登录交互式用户会话;无用户登录(服务器控制台 0 会话),StorageSenseTask 任务不会有效执行Microsoft ...。

6.7 外部干扰边界

EDR、杀毒过滤驱动拦截 DeleteFile 调用,出现 “统计显示大量可清理,实际空间不释放”。

七、自动化调用与排错脚本

7.1 WMI/CIM 触发 storagesense.dll 执行(等同于 UI 点立即运行)

Invoke‑CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense

底层:CIM 接口内部 COM 调用加载 storagesense.dll 执行清理逻辑。

7.2 读取存储感知事件日志(排查跳过、失败原因)

Get‑WinEvent -LogName Microsoft‑Windows‑StorageSense/Operational | Sort‑Object TimeCreated -Descending | Select‑Object TimeCreated,Id,Message | ft

7.3 任务计划手动触发后台任务

schtasks /run /tn "\Microsoft\Windows\StorageSense\StorageSenseTask"

7.4 组件修复

sfc /scanfile=C:\Windows\System32\storagesense.dll

八、Mermaid 简要时序(storagesense.dll 手动调用链路)

sequenceDiagram
    participant UI as SystemSettings.exe
    participant Adapter as SettingsHandlers_StorageSense.dll
    participant DLL as storagesense.dll
    participant Reg as Registry(HKCU StorageSense)
    participant FS as Win32 FileAPI
    participant ETW as EventLog

    UI->>Adapter: 请求临时文件统计
    Adapter->>DLL: COM CoCreateInstance()
    DLL->>Reg: 读取用户策略+白名单路径
    DLL->>FS: 遍历目录,扫描统计
    DLL-->>Adapter: 返回各分类占用大小
    Adapter-->>UI: UI渲染页面展示

    UI->>Adapter: 用户点击【删除文件】,传入勾选掩码
    Adapter->>DLL: 执行清理,传入选择掩码
    DLL->>FS: 遍历文件;判断锁定/权限/时间
    loop 每个文件
        alt 文件被占用 / 无访问权限
            DLL->>ETW: 记录【跳过】事件
        else
            DLL->>FS: DeleteFileW / 移入回收站
            DLL->>ETW: 记录删除成功事件
        end
    end
    DLL-->>Adapter: 返回执行结果
    Adapter-->>UI: 刷新存储页面

storusage.dll 深度解构分析

文件路径:C:\Windows\System32\storusage.dll Windows 10 1709 + 引入,Windows11 系统存储用量统计核心组件;COM 进程内 In‑Proc 组件,无独立 exe。 核心定位:为「设置‑系统‑存储」页面提供磁盘空间分类扫描、占用量计算;为 storagesense.dll 存储感知提供磁盘空闲 / 已用空间读数。 职责:只做扫描统计,不做文件删除,不执行清理动作;清理逻辑由storagesense.dll完成,二者分工严格隔离。

一、底层原理

  1. COM In‑Proc 进程内组件模型 无独立可执行程序,被多个宿主进程加载:
  • SystemSettings.exe(设置应用):UI 页面加载,生成存储概览、各类别占用大小(系统、应用、文档、临时文件、图片、视频等)。
  • storagesense.dll:存储感知内部调用,读取磁盘空闲阈值,判断是否触发自动清理。
  • 部分系统诊断组件也会加载该 DLL 获取磁盘分类数据。
  1. 内部三大核心引擎
  • 路径扫描引擎:基于系统内置分类规则库,遍历预定义目录;按文件归属打上分类标签(应用、系统、临时、文档、媒体、其他);不是全盘暴力扫描,采用规则白名单 + 已知目录映射。
  • 用量聚合引擎:遍历文件,累加文件大小;处理硬链接、重复数据流、NTFS 稀疏文件、目录 junction 连接点,避免重复重复统计;处理 ACL 访问拒绝,跳过无权限访问子目录。
  • 缓存管理引擎:扫描结果做内存 + 注册表缓存,避免每次打开设置都全量重扫磁盘;当文件大量增删后缓存会过期,触发重新扫描。
  1. 关键设计范式
  • 只读统计组件,无写文件、删除文件逻辑,风险面小;
  • 用户上下文执行:以调用方进程权限执行;普通用户拿不到系统受保护目录完整统计,部分目录标记为 “其他”;
  • 区分逻辑:
    • storusage.dll:算空间,做分类;
    • storagesense.dll:读统计结果 + 策略,执行文件删除清理;
  • 和传统磁盘清理cleanmgr.exe完全独立,不共用规则。

典型现象:打开设置‑存储会卡顿几秒,就是storusage.dll正在执行磁盘扫描计算。

二、依赖文件

文件 作用说明
storusage.dll 本体 COM 组件,扫描、分类、用量计算核心
SettingsHandlers_Storage.dll 设置 UI 适配器桥接,SystemSettings.exe 调用入口
ole32.dll COM 对象实例化、线程模型管理
kernel32.dll Win32 文件 API、目录遍历、文件大小获取、时间、稀疏文件处理
advapi32.dll ACL 权限查询,判断目录是否可访问
ntdll.dll 底层 NTFS 文件信息获取
storagesense.dll 消费方;读取 storusage 输出的磁盘空闲空间数值,用于自动清理触发判断

不依赖:cleanmgr.exe;不直接操作文件删除。

三、依赖关系

3.1 COM 注册表依赖

HKCR\CLSID\{StorUsage COM‑CLSID}\InprocServer32 指向storusage.dll,线程模型Apartment。 COM 注册损坏:设置的存储页面显示空白、一直转圈加载、无法展示磁盘占用数据,报错0x80040154类未注册。

3.2 缓存注册表依赖

HKCU\Software\Microsoft\Windows\CurrentVersion\StorageUsage

存放扫描时间戳、各分类缓存大小;用来避免频繁全盘扫描;缓存过期条件:时间超时、检测磁盘文件系统发生重大变更。 可删除该分支,强制下次打开存储页面全量重新扫描。

3.3 环境变量依赖

依赖系统环境变量:%SystemRoot%、%ProgramFiles%、%ProgramData%、%LOCALAPPDATA%、%USERPROFILE%; 环境变量篡改会导致目录匹配错位,分类统计错乱。

3.4 宿主进程依赖

  1. 主 UI 宿主:SystemSettings.exe 设置应用;用户打开 “系统‑存储” 页面时加载 DLL。
  2. 后台消费宿主:storagesense.dll(存储感知),读取磁盘空闲占比,判断是否达到低磁盘水位触发自动清理。
  3. 权限跟随宿主:普通用户运行,系统保护目录访问被拒绝,对应空间计入【其他】;需要管理员权限才能完整统计全部系统目录。

3.5 文件系统依赖

  1. 依赖 NTFS 文件系统 API;处理硬链接、符号链接、目录联结点,防止重复统计;
  2. EDR / 微过滤驱动如果拦截目录遍历 API,会造成扫描卡死、分类大小异常;
  3. 不支持扫描被挂载锁定的离线卷。

3.6 日志输出

ETW 通道:Microsoft‑Windows‑StorageUsage/Operational,记录扫描开始、扫描耗时、跳过目录、访问拒绝条目、缓存命中 / 失效事件,排错专用。

四、逻辑链路

链路 A:设置 UI 页面扫描(用户打开 设置 → 系统‑存储)

SystemSettings.exe
  →加载 SettingsHandlers_Storage.dll
    →COM CoCreateInstance 实例化 storusage.dll
      →读取 HKCU\StorageUsage 判断缓存是否有效
      if(缓存有效)
        直接返回上一次分类统计结果
      else
        加载内置分类规则白名单
        遍历磁盘目录;获取文件大小;做分类打标
        处理硬链接、稀疏文件、跳过权限拒绝目录
        聚合各个类别总大小(系统、应用、临时、文档、媒体、其他)
        写入注册表更新StorageUsage缓存
      →把分类数据回传给UI
    →UI渲染存储页面条形图与明细

链路 B:被 storagesense.dll 调用(存储感知自动清理)

storagesense.dll(后台任务上下文)
  →COM实例化 storusage.dll
    →请求获取磁盘总空间 / 空闲空间百分比
    →返回磁盘空闲数值
  storagesense.dll 判断:空闲空间是否低于阈值,决定是否执行自动清理

重要边界:storusage.dll不会调用 storagesense.dll;只输出读数,清理逻辑完全在上层 DLL。

五、配套链

  1. UI 配套SystemSettings.exe + SettingsHandlers_Storage.dll:设置页面的桥接适配器,负责向用户展示分类磁盘占用。
  2. 缓存配套 注册表项HKCU\Software\Microsoft\Windows\CurrentVersion\StorageUsage:扫描结果缓存,减少磁盘 IO 开销。
  3. 消费方配套storagesense.dll存储感知组件,使用它的磁盘空闲指标作为自动清理触发条件。
  4. 排错配套 事件日志 Microsoft‑Windows‑StorageUsage/Operational,排查扫描卡顿、目录跳过、统计不准问题。
  5. 组策略配套 无单独组策略;受系统存储感知整套组策略间接影响。
  6. 对比互补组件
  • cleanmgr.exe:自带独立磁盘占用统计逻辑,和 storusage 完全隔离;
  • dir、Get‑ChildItem PowerShell:系统原生遍历,没有 Windows 设置里的分类逻辑。

六、边界(约束、坑、失效边界)

6.1 权限边界

  1. DLL 权限继承调用进程;普通用户执行,部分系统目录拒绝访问,无法识别归类,这部分磁盘空间全部计入【其他】;
  2. 多用户隔离:HKCU按用户隔离,A 用户的扫描缓存不作用于 B 用户;每个用户打开存储页面会独立扫描生成自己的缓存。

6.2 扫描与分类边界

  1. 默认可对多个磁盘卷扫描;但存储感知 storagesense.dll 只处理 C 盘,二者职责不同;
  2. 使用内置固定分类规则白名单;第三方软件私有目录不一定被正确识别,未识别的全部归入【其他】;
  3. 处理硬链接:同一个文件多硬链接,只统计一次大小,避免虚高;
  4. 符号链接 /junction 点会做防循环处理,防止无限递归扫描。

6.3 缓存边界

  1. 缓存不会实时自动刷新;大量拷贝 / 删除文件后,打开存储页面看到旧数据,需要等待缓存过期,或删除注册表缓存强制重扫;
  2. 系统休眠、快速启动重启,缓存可以保留;磁盘卷变更会使缓存失效。

6.4 COM 故障边界

  1. CLSID 注册表损坏:设置存储页面一直转圈、空白,0x80040154;
  2. DLL 文件损坏修复:
sfc /scanfile=C:\Windows\System32\storusage.dll

6.5 性能边界

  1. 系统盘文件极多的时候,首次全量扫描 IO 压力高,设置页面卡顿;
  2. 大量权限拒绝目录会拉长扫描耗时;日志可以看到大量 “Access Denied” 事件。

6.6 功能边界(高频混淆)

  1. ✘ storusage.dll不删除任何文件,没有清理逻辑;清理是 storagesense.dll;
  2. ✘ 不读取 VolumeCaches,与 cleanmgr 完全隔离;
  3. ✘ 不控制存储感知开关,只提供统计数据。

6.7 外部干扰边界

EDR / 杀毒过滤驱动拦截目录遍历 API,现象:存储页面加载极慢,分类大小明显失真。

七、自动化与排错

7.1 清除缓存强制重新扫描存储统计

# 删除当前用户StorageUsage缓存,打开设置‑存储将触发完整重扫
Remove‑Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageUsage" -Recurse -ErrorAction SilentlyContinue

7.2 读取 StorageUsage 事件日志排查扫描异常

Get‑WinEvent -LogName Microsoft‑Windows‑StorageUsage/Operational | Sort‑Object TimeCreated -Descending | Select‑Object TimeCreated,Id,Message | ft

7.3 文件修复

sfc /scanfile=C:\Windows\System32\storusage.dll

Mermaid 时序图

sequenceDiagram
    participant UI as SystemSettings.exe
    participant Adapter as SettingsHandlers_Storage.dll
    participant DLL as storusage.dll
    participant Reg as Registry HKCU\StorageUsage
    participant FS as NTFS FileSystem
    participant ETW as EventLog

    UI->>Adapter: 打开存储页面,请求磁盘分类统计
    Adapter->>DLL: COM实例化storusage.dll
    DLL->>Reg: 查询扫描缓存
    alt 缓存有效未过期
        DLL-->>Adapter: 返回缓存统计数据
    else 缓存失效
        DLL->>FS: 按规则遍历目录,分类聚合大小
        DLL->>ETW: 记录扫描日志,跳过权限拒绝目录
        DLL->>Reg: 写入新扫描缓存
        DLL-->>Adapter: 返回分类统计结果
    end
    Adapter-->>UI: 渲染存储UI条形图明细

    Note over DLL: 另外一条链路:被storagesense.dll调用
    participant SS as storagesense.dll
    SS->>DLL: 请求磁盘空闲百分比
    DLL-->>SS: 返回空闲空间数值
    Note over SS: storagesense根据阈值判断是否清理

cleanmgr.exe 深度解构分析

路径:C:\Windows\System32\cleanmgr.exe 传统磁盘清理工具;Windows Vista‑Windows11 兼容;独立 EXE 可执行程序。 核心定位:基于VolumeCaches注册表扩展模型,扫描各类系统缓存垃圾;支持 Sagerun 自动化配置; 重要区分:cleanmgr.exe 和 Win11 设置页「存储‑临时文件」(storusage.dll+storagesense.dll)是两套完全独立的栈,规则库隔离,互不调用。

一、底层原理

  1. 可执行程序模型 原生 Win32 EXE,非 COM DLL;既可 GUI 交互运行,也支持命令行静默运行;运行上下文:当前调用用户,部分系统清理项需要管理员权限。
  2. 内部四大核心模块
  • VolumeCaches 配置解析模块:读取注册表 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches,枚举每一个清理器(Cache Handler),每个子项代表一类可清理对象(更新缓存、缩略图、WinSxS 更新备份、用户临时文件、内存转储等)。
  • 缓存处理器加载模块:每个 VolumeCaches 项可指定DLL处理器;cleanmgr 加载对应处理 DLL,由 DLL 实现该类垃圾的扫描计算大小 + 删除逻辑;cleanmgr 本身只是调度外壳。
  • GUI 交互模块:读取各个 Cache Handler 返回可释放空间,渲染复选框列表;用户勾选后,调度各个处理器执行删除。
  • SageSet 自动化配置模块:把用户勾选状态保存到注册表 SageSet (N);/sagerun:N直接加载该套勾选配置实现无人值守清理。
  1. 设计范式
  • 插件化模型:清理项由外部 DLL 插件实现,cleanmgr.exe 只做调度外壳;第三方软件理论可注册 VolumeCaches 扩展自定义清理项。
  • 卷绑定:按磁盘卷(C:\ D:\)分别执行清理,支持指定驱动器 /d 参数。
  • 文件处理行为:部分文件移入回收站;系统类缓存直接永久删除;遇到锁定占用文件:部分 Handler 会跳过,部分旧处理器会报错。

关键认知:cleanmgr.exe 本身不内置大量扫描删除代码,更多是调度器;真正扫描删除逻辑分散在各个 VolumeCaches 对应的 Handler‑DLL。 与 StorageSense 体系完全隔离:cleanmgr 不调用 storagesense.dll;storagesense.dll 不读取 VolumeCaches 注册表。

二、依赖文件

文件 作用说明
cleanmgr.exe 主程序外壳,GUI、命令行、Sagerun 调度逻辑
advapi32.dll 注册表读写,读取 VolumeCaches、SageSet 配置
shell32.dll Shell UI、回收站操作、文件外壳 API
kernel32.dll 文件遍历、文件删除、进程环境
comctl32.dll GUI 对话框控件库
各类 Cache‑Handler DLL 每一类清理项的实际业务实现,示例:cryptnet.dll(更新缓存)、dwmapi.dll、thumbcache.dll缩略图、wer.dll错误报告、winsxs.dll组件存储清理处理器

注意:Win11 中部分 VolumeCaches 项已经废弃,对应的 handler DLL 不再维护;部分条目仅保留注册表键,无实际处理逻辑。

三、依赖关系

3.1 核心注册表依赖

  1. 清理插件库 VolumeCaches(机器级,全局)
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches

每一个子键 = 一个清理类别;子键内参数:

  • StateFlags:状态标记;
  • DLL:指定处理该缓存的 DLL 文件名;
  • Description、Display:UI 显示名称说明;

此处注册表损坏会出现清理项丢失、点击无响应、计算大小卡死。

  1. SageSet 自动化配置(用户配置)
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\SageSet0~SageSet9

存储 /sageset:N 交互保存的勾选集合;/sagerun:N读取该配置静默执行。

3.2 命令行参数依赖

  • /d <driveletter>:选定驱动器;
  • /sageset:N:GUI,手动勾选并保存为 N 号配置;
  • /sagerun:N:加载 N 号配置,静默执行清理; 无参数:弹出图形交互界面。

3.3 权限依赖

  1. 普通用户:可以清理用户临时文件、缩略图;WinSxS 组件存储、Windows 更新清理、系统转储等条目需要管理员权限;权限不足对应清理项置灰或者直接跳过。
  2. 多用户:SageSet 存储在 HKCU,每个用户独立一套自动化配置。

3.4 文件系统依赖

  1. NTFS API;部分处理器需要访问 WinSxS 组件存储目录;
  2. EDR 微过滤驱动拦截文件删除,会出现显示可清理,执行后空间不变。

3.5 日志

cleanmgr 本身没有专用 ETW 通道;删除、跳过、报错信息分散在:应用程序事件日志、Windows 更新日志、WER 日志。

四、逻辑链路

链路 A:GUI 交互完整链路(直接运行 cleanmgr.exe)

cleanmgr.exe 启动(GUI模式)
  →读取HKLM VolumeCaches全部子项
  →枚举每一个清理类别
    →加载该类别指定的Handler‑DLL
    →调用DLL接口:扫描卷,计算可释放空间
  →汇总所有类别可释放大小,构建GUI复选框窗口
  [用户勾选需要清理的项目,点击确定]
  →遍历被勾选的清理项
    →调用对应Handler‑DLL的删除接口
    →各个DLL完成文件扫描、删除;锁定文件按插件逻辑跳过/报错
  →全部完成后GUI提示完成,退出程序

链路 B:自动化流水线 sageset /sagerun

#第一步:生成配置
cleanmgr /sageset:1
  弹出GUI,用户勾选清理项
  →将勾选状态写入 HKCU\...\VolumeCaches\SageSet1

#第二步:无人值守执行
cleanmgr /sagerun:1
  读取 SageSet1 保存的勾选掩码
  →读取VolumeCaches,加载对应Handler DLL
  →静默执行各个清理项删除,无GUI窗口
  执行完毕进程退出

重要:/sagerun依然继承当前用户权限;系统级清理必须在管理员身份下执行。

五、配套链

  1. UI 配套:原生 Win32 对话框(comctl32),不是 UWP/SystemSettings.exe;和设置存储页面完全分离。
  2. 配置配套:VolumeCaches(全局插件库) + SageSet(用户自动化预设)注册表。
  3. 功能互补组件
    • DISM.exe /Online /Cleanup‑Image /StartComponentCleanup:WinSxS 深度组件清理;部分逻辑与 cleanmgr 的 WinSxS handler 复用底层 DLL,但入口独立;
    • storusage.dll + storagesense.dll:Win11 设置存储‑临时文件栈;两套栈规则互不读取。
  4. 扩展能力配套:第三方程序可注册 VolumeCaches 子项,注册自定义 DLL 实现自定义垃圾清理(该扩展接口现代已经不推荐使用)。
  5. 运维配套:批处理可封装sagerun实现旧版系统自动化磁盘清理。

六、边界(约束、坑点、失效边界)

6.1 组件职责边界

  1. cleanmgr.exe只是调度外壳;真正扫描删除由各个 VolumeCaches 对应的 Handler‑DLL 完成;DLL 损坏会造成某一项清理卡死 / 失效,而不是整个程序崩溃。
  2. 完全不读取 StorageSense 注册表;storagesense.dll 不读取 VolumeCaches;两套清理项集合不一样。

现象:cleanmgr 能看到 “Windows 更新清理”,但 Win11 设置‑临时文件不一定显示该项。

6.2 权限边界

  1. 普通用户运行,系统级清理项(WinSxS、更新备份、系统内存转储)会被跳过或置灰;必须提升管理员权限。
  2. SageSet 存储在 HKCU;A 用户保存的 sageset 配置,B 用户不能读取。

6.3 卷与扫描边界

  1. 支持指定任意驱动器/d D:;VolumeCaches 处理器对数据盘生效;StorageSense 仅默认处理 C 盘。
  2. 插件模型:个别第三方 / 废弃 VolumeCaches 项,Handler DLL 缺失,会导致 cleanmgr 启动卡死、报错。

6.4 文件处理边界

  1. 不同 Handler DLL 对 “被占用锁定文件” 行为不一致:有的直接跳过;有的抛出错误弹窗;没有统一的全局跳过策略。
  2. 部分清理项删除不可逆:例如 Windows 更新备份、WinSxS 旧组件清理完成后,无法卸载已安装更新。

6.5 自动化边界

  1. /sagerun:N 不会自动提升权限;脚本中需要显式以管理员运行,否则系统清理项不生效。
  2. SageSet 只保存勾选状态;不保存动态扫描大小;每次sagerun执行时会重新实时扫描磁盘。

6.6 故障边界

  1. VolumeCaches 注册表子项损坏、乱项:表现为打开 cleanmgr 卡死、闪退、清理项缺失。
  2. 文件本体损坏修复:
sfc /scanfile=C:\Windows\System32\cleanmgr.exe
  1. Win11 趋势:微软逐步弱化 cleanmgr,部分新系统特性不在 VolumeCaches 新增条目,新增清理逻辑放到 StorageSense 栈。

6.7 外部干扰边界

EDR 过滤驱动拦截各个 Handler‑DLL 的文件删除 API,造成统计显示可释放,实际空间不回收。

七、自动化与排错示例

::1. 打开配置界面,保存为编号1配置
cleanmgr /sageset:1

::2. 静默执行编号1配置(必须管理员运行才能完整清理系统项)
cleanmgr /sagerun:1

::3. 指定D盘执行清理
cleanmgr /d D: /sagerun:1

PowerShell 强制管理员上下文执行 sagerun 示例片段:

Start‑Process cleanmgr.exe -ArgumentList "/sagerun:1" -Verb RunAs

Mermaid 时序图

sequenceDiagram
    participant CM as cleanmgr.exe
    participant RegVol as Registry VolumeCaches
    participant RegSage as SageSet(HKCU)
    participant HandlerDLL as 各类Cache‑Handler DLL
    participant FS as FileSystem

    Note over CM: GUI模式启动
    CM->>RegVol: 读取全部VolumeCaches清理项
    loop 每一个清理类别
        CM->>HandlerDLL: 加载指定DLL,调用扫描接口
        HandlerDLL->>FS: 扫描对应缓存目录,计算大小
        HandlerDLL-->>CM: 返回可释放空间
    end
    CM->>CM: 构建GUI复选框列表展示
    Note over CM: 用户勾选,点击确定
    loop 被勾选类别
        CM->>HandlerDLL: 调用删除接口
        HandlerDLL->>FS: 执行删除,锁定文件按插件逻辑处理
    end

    Note over CM: /sagerun自动化链路
    CM->>RegSage: 读取SageSetN勾选掩码
    CM->>RegVol: 加载对应VolumeCaches处理器
    loop 勾选的清理项
        CM->>HandlerDLL: 执行删除逻辑
    end

Windows 磁盘清理 ,Windows 11 系统 -存储-临时文件

Windows 磁盘清理工具和存储管理功能的发展经历了多个版本的更新,尤其是在 Windows 11 系统中,临时文件管理变得更加集成和智能。以下是一个简要的时间线,涵盖了 Windows 系统磁盘清理和临时文件管理的发展:

1. Windows XP - 磁盘清理工具 (Disk Cleanup)

  • 发布年份:2001
  • 功能:Windows XP 引入了磁盘清理工具(Disk Cleanup),该工具用于删除临时文件、系统缓存、日志文件以及已删除的文件夹和文件等。
  • 临时文件清理:主要清理 Internet 临时文件、系统缓存等。

2. Windows Vista - 增强版磁盘清理

  • 发布年份:2007
  • 功能:Windows Vista 在 XP 的基础上增强了磁盘清理功能,提供了更多的系统文件和更新文件清理选项,例如 Windows 更新清理和 Windows 日志文件。
  • 新增功能:加入了清理 Windows 更新和临时系统文件的功能,支持删除服务包的安装文件等。

3. Windows 7 - 更加用户友好的磁盘清理

  • 发布年份:2009
  • 功能:Windows 7 继续改进了磁盘清理工具,添加了更多可清理项,如 System Restore 和 Shadow Copies(系统还原点和影像文件),使磁盘空间得到更好管理。
  • 临时文件清理:优化了临时文件、浏览器缓存和日志文件的清理。

4. Windows 8 - 新的存储管理

  • 发布年份:2012
  • 功能:Windows 8 增强了存储管理功能,系统可以自动管理临时文件,提升磁盘清理效率。
  • 新增功能:提供了存储感知(Storage Sense)功能,帮助用户清理临时文件、卸载不常用的应用程序,并清理垃圾文件。

5. Windows 10 - 存储感知功能的进一步发展

  • 发布年份:2015
  • 功能:Windows 10 引入了更强大的存储管理功能,特别是存储感知(Storage Sense),它可以自动清理临时文件、旧的 Windows 更新、系统缓存以及已安装的应用程序的缓存。
  • 新增功能:
    • 存储感知可以定期清理临时文件。
    • 增强的磁盘清理工具,支持更复杂的文件清理选项。
    • 用户可以通过设置来启用或禁用自动清理功能。

      Windows10 存储感知 (Storage Sense) 分析框架

      定位:Windows10(2015 首发)磁盘空间自动治理子系统;是对传统 cleanmgr.exe 磁盘清理的现代化重构,把一次性手动磁盘清理升级为后台定时自动化存储管理服务;Windows11 的存储感知是在此版本基础之上迭代演进。 版本基线:Windows10 1507 首次引入存储感知雏形,后续 1703、1809 持续扩充能力。

      1 底层原理

      1. 磁盘空间压力驱动 + 时间阈值双条件触发原理 存储感知后台任务,监控磁盘可用空间;同时支持按时间周期触发。当可用空间低于阈值、或到达定时周期,启动扫描;识别系统临时文件、更新缓存、回收站、下载目录过期文件等可回收对象。
      2. 预定义清理项清单过滤原理 内部维护一套清理规则集合:目录路径、文件后缀、文件最小过期时间、文件类型标签;不是粗暴删除整个文件夹;会判断文件最后访问时间、创建时间,只清理满足 “过期” 条件的文件;正在被占用、系统受保护文件直接跳过。
      3. 后台任务调度模型 存储感知不运行为常驻服务,依托 Windows Task Scheduler 任务计划程序 的后台任务(\Microsoft\Windows\StorageSense)进行唤醒;闲置、电池 / 电源策略会影响是否执行,减少性能功耗开销。
      4. UI‑后台分离架构 设置应用(SystemSettings.exe)提供 UI 界面,供用户开关、配置规则;UI 本身不执行任何文件删除;配置写入注册表;后台任务读取注册表配置,调用storagesense.dll完成扫描、过滤、删除。
      5. 清理闭环模型 任务被唤醒 → 读取注册表策略 → 遍历预定义目录集合 → 文件状态过滤(保护、占用、过期时间)→ 执行删除 → 记录日志,更新磁盘占用统计。

      Windows10 早期 1507 版本存储感知能力有限;1703 之后才开放图形界面开关,早期仅内部生效。

      2 依赖文件 / 依赖数据资产

      分类 核心依赖文件 / 资产 作用说明
      注册表配置 HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense 总开关、触发条件、过期天数、各类清理项启用状态;组策略同样读写该路径
      计划任务 \Microsoft\Windows\StorageSense\StorageSenseTask 存储感知后台唤醒触发器,定时 / 空间阈值触发载体
      核心二进制 storagesense.dll 存储感知核心业务逻辑,扫描、规则判断、文件删除实现
      兼容组件 cleanmgr.dll 继承传统磁盘清理的部分清理项定义,新旧工具复用部分规则
      扫描目标目录 %TEMP%、C:\Windows\Temp、C:\Windows\SoftwareDistribution\Download、C:\Windows.old、回收站目录、应用缓存目录 待扫描的各类临时文件存放路径
      日志文件 %SystemRoot%\Logs\StorageSense\*.etl / *.log 扫描、跳过、删除文件日志,用于排查清理不生效问题
      存储统计缓存 WinRT 存储统计数据库 设置‑存储页面展示各分类磁盘占用大小

      3 依赖关系

      3.1 调用依赖链

      任务计划程序(schedsvc.dll)
          ↓唤醒
      storagesense.dll(StorageSenseTask后台任务)
          ↓系统API调用
      kernelbase.dll / advapi32.dll(文件枚举、ACL权限校验、文件删除)
          ↓
      ntoskrnl.exe NTFS文件系统层执行实际IO操作
      
      设置UI(SystemSettings.exe)
          ↓COM读写注册表
          仅修改配置,不直接触发删除;可通过CIM/WMI主动手动触发一次执行

      故障传导:计划任务损坏 → 自动存储感知完全不跑;注册表键损坏 → 设置界面开关异常;文件被进程锁定 → 文件跳过不予删除;目录 ACL 权限不足 → 统计可见文件,清理无法释放空间。

      3.2 软件组件依赖

      1. storagesense.dll:Windows10 新增核心库,存储感知全部业务实现;
      2. schedsvc.dll:任务计划服务,负责后台任务调度;
      3. cleanmgr.dll:传统磁盘清理组件,提供兼容清理项;
      4. systemsettings.exe:设置应用,UI 视图、参数配置载体;
      5. CIM/WMI:对外提供调用接口,支持脚本手动触发存储感知执行;
      6. 组策略模板:可域环境批量强制开关存储感知、锁定清理策略。

      3.3 非技术强依赖

      1. NTFS 文件系统;FAT32 不支持部分文件时间属性、权限,会影响判断;
      2. 文件占用锁机制:存储感知不会终止进程抢删文件,被占用直接跳过;
      3. 电源策略:笔记本电池模式下,后台任务可能被抑制不执行,节省电量;
      4. 系统版本差异:Win10 1507 只有隐形存储感知,无设置 UI;1703 才开放用户可配置界面。

      3.4 故障传导关系

      1. 计划任务丢失 / 禁用:手动清理还可以用,自动存储感知完全失效;
      2. 注册表配置损坏:设置页面开关置灰、选项丢失;
      3. 第三方软件持续占用临时目录:每次扫描全部跳过,临时文件反复出现;
      4. 组策略强制关闭存储感知:设置中开关不可修改;
      5. 日志 ETL 损坏:无法排查哪些文件被跳过。

      4 逻辑链路

      flowchart LR
      A[系统/应用运行生成临时文件、更新缓存、回收站旧文件] --> B{触发方式}
      B -->|自动触发:任务计划 时间/磁盘空间阈值| C[StorageSenseTask后台任务唤醒]
      B -->|手动触发:设置界面 / CIM脚本调用| D[COM接口传入触发指令]
      C & D --> E[storagesense.dll读取注册表清理策略]
      E --> F[遍历系统预定义可清理目录清单,枚举全部文件]
      F --> G{多层过滤判断}
      G -->|系统受保护文件| H[跳过,写入日志]
      G -->|进程占用锁定| I[跳过,写入日志]
      G -->|未达到过期时间条件| J[跳过,写入日志]
      G -->|匹配清理规则+过期| K[加入待删除集合]
      H & I & J & K --> L[对待删除集合执行删除;部分文件直接永久删除,部分进入回收站]
      L --> M[更新磁盘占用统计;输出StorageSense日志]
      M --> N[后台任务结束休眠,等待下一次触发]
      N --> A

      子链路拆分

      1. 自动后台链路:任务计划驱动,无 UI 静默执行;Win10 重点新增能力;
      2. 手动触发链路:用户在设置操作或者脚本调用,立刻执行一次扫描清理;
      3. 配置链路:设置界面仅读写注册表,不参与文件操作。

      关键约束:存储感知是事后清理机制,无法阻止程序产生临时文件。

      5 配套链

      5‑1 硬件配套链

      NTFS 格式磁盘;无特殊硬件依赖;笔记本受电池电源状态约束。

      5‑2 软件配套链

      1. 核心组件:storagesense.dll;计划任务 StorageSenseTask;
      2. 传统兼容工具:cleanmgr.exe 磁盘清理工具,Win10 同时保留;二者清理项不完全相同;
      3. CIM/WMI 接口:支持脚本自动化调用存储感知;
      4. 事件查看器 + %windir%\Logs\StorageSense 日志用于故障排查;
      5. 组策略:企业批量管控存储感知开关与清理规则。

      5‑3 业务配套链

      1. 能力边界:Win10 存储感知支持清理:临时文件、旧 Windows 更新包、回收站过期文件、下载文件夹过期文件;
      2. 版本差异:早期 Win10 版本功能残缺,越往后版本支持清理类型越多;
      3. 排查手段:查看 StorageSense 日志,确认哪些文件因为占用 / 保护被跳过;
      4. 风险提示:清理Windows.old之后,无法回退旧版本 Windows。

      6 边界(限制、坑点、失效边界)

      6‑1 技术边界

      1. 目录白名单边界:仅处理系统内置预定义路径;第三方软件自己私有缓存目录,不会被存储感知扫描清理。
      2. 占用文件处理边界:不会杀死进程强制删除,被锁定文件直接跳过;表现为 “清理完很快又看到同样临时文件”。
      3. UI 与后台分离边界:设置只是配置视图;即使 UI 显示正常,如果计划任务损坏,自动清理不会运行。
      4. 时间阈值边界:回收站、下载文件夹需要满足 “文件过期 N 天” 才会删;刚产生的文件不会被清理。
      5. 版本边界:Win10 1507 无设置 UI,用户看不到开关,仅系统内部运行;1703 才开放可视化配置。

      6‑2 业务边界

      1. 自动化边界:存储感知只能清理已经生成的垃圾,不能拦截临时文件产生。
      2. 和 cleanmgr.exe 差异:传统磁盘清理拥有部分系统更新回滚、系统还原点清理项,存储感知早期 Win10 版本并不全部支持。
      3. 风险边界:开启下载文件夹清理,会把过期下载文档直接删除,存在用户数据丢失风险。

      6‑3 失效边界

      1. StorageSense 计划任务被删除 / 禁用:自动清理彻底不工作,手动 CIM 调用仍可执行;
      2. 注册表配置被组策略锁定:设置内开关灰色不可更改;
      3. 磁盘权限 ACL 错乱:扫描统计识别垃圾文件,但是无法执行删除,空间不释放;
      4. 笔记本电池供电:后台任务被系统节流抑制,存储感知不会自动运行。

      7 自动化流水线

      7‑1 Win10 存储感知自动流水线(后台任务)

      计划任务触发器到达(时间 / 磁盘空间阈值)
      →唤醒 StorageSenseTask
      →读取HKCU/HKLM下StorageSense注册表策略
      →加载预定义清理目录、过期时间规则
      →枚举文件;过滤保护、占用、未过期文件
      →执行删除
      →写入日志,更新存储统计
      →任务休眠等待下一轮触发

      7‑2 PowerShell 手动调用流水线(Win10 1703 及以上)

      # 手动触发一次存储感知执行
      Invoke-CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense

      7‑3 简化伪代码

      FOR file IN 预定义清理目录集合:
          IF 文件是系统保护文件:
              continue
          IF 文件被进程锁定占用:
              log("跳过:文件被占用")
              continue
          IF 文件存活时间 < 用户配置过期天数:
              continue
          IF 该分类清理开关已经启用:
              delete(file)
      记录释放空间,写入日志

      Windows10 存储感知,本质是把一次性手动磁盘清理升级为后台定时自动化任务;依托任务计划调度,storagesense.dll 实现核心逻辑,设置界面仅修改注册表配置;受文件锁、电源策略、版本迭代影响较大;仅处理系统白名单路径,第三方软件私有缓存不在处理范围;Windows11 的存储感知是在此基础之上继续扩充清理项与 UI 交互。

6. Windows 11 - 集成的临时文件管理和存储感知

  • 发布年份:2021
  • 功能:Windows 11 在存储和临时文件管理方面进行了更加现代化的整合,存储部分包括了临时文件的集中管理,且更加简洁和易于访问。
  • 新增功能:
    • 在“设置”中的“存储”选项卡下,用户可以直接管理临时文件和系统文件。
    • 存储感知功能得到增强,自动清理临时文件、旧的更新文件以及不必要的系统文件。
    • 用户可以在“存储”设置中查看磁盘使用情况,并通过“临时文件”选项删除无用的文件。

7. Windows 11 - 临时文件具体清理选项

  • 在 Windows 11 系统中,临时文件的管理和清理方式更加直观:
    • 进入 设置 > 系统 > 存储 > 临时文件,用户可以选择清理以下类型的临时文件:
      • 系统产生的临时文件:包括 Windows 更新、日志文件等。
      • 浏览器缓存和下载文件。
      • 应用程序缓存,包括 Microsoft Store 应用的临时文件。
      • 错误报告文件,用于系统问题和崩溃的日志。
    • 系统可以自动定期删除这些文件,用户也可以手动触发清理操作。

      Windows11 临时文件(存储感知‑设置临时文件清理)分析框架

      定位:Windows 用户态 + 系统态临时垃圾生命周期管理子模块;包含手动清理(设置‑存储‑临时文件)、存储感知自动清理;负责管理系统更新缓存、日志、应用缓存、转储错误报告、浏览器缓存等;底层调用系统组件完成文件筛选、枚举、删除,并非简单的文件夹删除。

      1 底层原理

      1. 临时文件生命周期原理 系统、应用运行过程会生成中间临时文件:更新解压缓存、日志、崩溃转储、缓存资源、安装临时文件;多数文件程序退出后不再使用,但不会自动删除,持续占用磁盘;部分文件被进程占用,不可直接删除。
      2. 元数据 + 目录标记原理 Windows 维护一套可清理项清单,定义每一类临时文件对应的目录路径、文件后缀、删除条件;不是全盘删除目录,而是按类别过滤文件;区分:可安全删除、正在使用禁止删除、受保护系统文件。
      3. 两套执行模式
      • 手动模式:设置 → 系统 → 存储 → 临时文件,用户勾选分类,手动点击删除文件;
      • 自动模式:存储感知(Storage Sense),按磁盘空闲阈值 / 时间阈值,后台定期自动执行清理。
      1. COM 组件调度执行原理 设置界面只是 UI 层,本身不做文件删除;UI 通过 COM 调用存储感知相关组件,组件遍历预定义路径,判断文件属性、最后访问时间、占用状态,过滤出待删除文件列表,执行删除;被打开占用的文件跳过不删除。
      2. 删除闭环模型 UI 勾选清理分类 → 参数传递给后台组件 → 枚举匹配路径文件 → 过滤占用 / 受保护文件 → 执行删除(部分进入回收站,部分直接永久删除)→ 返回清理释放空间结果,更新存储视图。

      2 依赖文件 / 依赖数据资产

      分类 核心依赖文件 / 资产 作用说明
      配置注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense 存储感知开关、自动清理周期、阈值、各类临时文件清理启用开关
      清理项定义 系统内置的可清理项清单(COM 内部定义,部分在注册表);各类临时文件目录清单 定义哪些路径、哪些文件属于临时文件,UI 展示勾选选项来源
      目标文件目录 %TEMP%、C:\Windows\Temp、C:\Windows\SoftwareDistribution\Download、%LocalAppData%\Packages\*\LocalState\Cache、C:\Windows\Minidump、错误报告目录、浏览器缓存目录 各类临时文件实际存储位置
      状态数据 存储统计数据库;磁盘占用扫描缓存;上次存储感知执行时间戳 设置‑存储页面显示磁盘占用大小,判断是否触发自动清理
      日志输出 %SystemRoot%\Logs\StorageSense 日志文件 记录存储感知扫描、删除、跳过文件详情,排查清理失效问题

      3 依赖关系

      3.1 组件调用依赖链(逻辑调用链)

      设置UI (SystemSettings.exe)
       ↓ COM调用
      StorageSense.dll / CleanMgr.dll(磁盘清理组件)
       ↓ 调用
      kernel32.dll / advapi32.dll(文件枚举、删除、权限校验)
       ↓ NT内核执行文件系统操作(ntoskrnl.exe)

      故障传导:组件注册损坏 → 设置页面临时文件加载异常;目录权限不足 → 文件跳过无法删除;文件被进程占用 → 该文件跳过保留。

      3.2 软件组件依赖

      1. storagesense.dll:存储感知核心实现,负责扫描、判断规则、自动清理;
      2. cleanmgr.dll:传统磁盘清理组件,Windows11 设置内的临时文件 UI 底层复用部分逻辑;
      3. systemsettings.exe:设置应用,仅做 UI 展示、用户选项收集,本身不执行删除;
      4. advapi32.dll/kernelbase.dll:文件枚举、权限、删除系统 API;
      5. 注册表:保存存储感知全部策略;组策略可强制管控存储感知行为。

      3.3 非技术强依赖

      1. 文件系统权限:部分系统临时目录需要系统权限;普通用户权限会跳过部分系统级临时文件;
      2. 文件占用状态:正在被程序锁定的临时文件,无法删除,直接跳过;
      3. 磁盘文件系统:NTFS;压缩、硬链接、权限 ACL 会影响删除行为;
      4. 用户策略:组策略可以禁用存储感知、禁用临时文件清理功能。

      3.4 故障传导关系

      1. 注册表存储感知配置损坏:设置页面临时文件选项异常、存储感知不自动运行;
      2. 目录权限异常:扫描统计到文件,但清理无法删除,磁盘空间不会释放;
      3. 第三方程序持续占用临时文件:每次清理都跳过该批文件,临时文件越积越多;
      4. Windows 更新缓存目录异常锁死:更新临时文件类别清理无效果;
      5. 日志损坏:无法查看存储感知执行排查信息。

      4 逻辑链路

      flowchart LR
      A[系统/应用运行产生各类临时文件] --> B{触发来源}
      B -->|手动触发:设置>系统>存储>临时文件 勾选类别| C[SystemSettings.exe收集用户勾选参数]
      B -->|自动触发:存储感知达到时间/磁盘阈值| D[StorageSense后台唤醒]
      C --> E[COM调用传入清理分类参数]
      D --> E
      E --> F[组件遍历预定义目录清单,枚举文件]
      F --> G{文件过滤判断}
      G -->|系统受保护文件 / 正在被进程占用| H[跳过该文件,记录日志]
      G -->|匹配临时文件规则,未占用| I[加入待删除列表]
      H & I --> J[对待删除列表执行删除;部分进回收站,部分直接永久删除]
      J --> K[统计释放空间,写StorageSense执行日志,更新存储统计缓存]
      K --> L[设置界面刷新显示磁盘占用;自动模式完成后台静默退出]
      L --> A

      子链路拆分

      1. 手动清理链路:用户 UI 勾选 → 传递参数 → 后台组件执行删除 → UI 反馈结果;
      2. 存储感知自动链路:后台定时器 / 磁盘阈值触发,无 UI 交互,静默扫描‑过滤‑删除‑写日志。

      关键约束:设置界面只是 UI 外壳,真正删除逻辑在 storagesense.dll;UI 不能直接操作文件。

      5 配套链

      5‑1 硬件配套链

      磁盘(NTFS 卷);无特殊硬件依赖。

      5‑2 软件配套链

      1. 核心组件:storagesense.dll、cleanmgr.dll、systemsettings.exe;
      2. 传统配套工具:cleanmgr.exe(旧版磁盘清理,Windows11 仍然保留,和设置页面底层共享部分清理项);
      3. 组策略模板:可配置存储感知、临时文件清理策略;
      4. 日志查看:事件查看器 + %windir%\Logs\StorageSense文本日志。

      5‑3 业务配套链

      1. 功能开关:存储感知总开关;可配置自动清理时间、删除临时文件阈值、回收站 / 下载文件夹处理规则;
      2. 边界说明:下载文件夹默认可选清理,谨慎勾选;部分应用私有缓存不在系统临时文件清理范围内;
      3. 排查手段:查看 StorageSense 日志定位哪些文件被跳过;
      4. 约束:系统关键更新缓存部分场景不能删除,会影响回滚功能。

      6 边界(限制、坑点、失效边界)

      6‑1 技术边界

      1. UI 只是视图边界:设置临时文件页面仅收集选项,不负责文件删除;组件损坏会出现:页面能看到文件大小,点击删除无效果。
      2. 占用跳过边界:被进程锁定的临时文件不会强制终止进程删除,直接跳过;会出现 “反复看到相同临时文件” 现象。
      3. 清理项范围边界:仅清理系统预定义清单内路径;第三方软件自己的私有缓存目录,不会被系统临时文件清理扫描到。
      4. 删除行为差异:部分文件直接永久删除,不会进回收站;下载文件夹勾选后会删除下载内容。
      5. 权限边界:普通用户无法清理部分系统级临时目录内容,组件自动跳过。

      6‑2 业务边界

      1. 自动化边界:存储感知只是扫描删除已有临时文件,不能阻止程序生成新临时文件;只能事后清理,不能事前拦截。
      2. 功能区分:cleanmgr.exe 传统磁盘清理 和 设置内临时文件,清理项不完全等价,存在差异。
      3. 风险边界:删除 Windows 更新旧缓存后,无法卸载对应更新包。

      6‑3 失效边界

      1. 存储感知注册表配置损坏:自动清理完全不执行;手动清理 UI 仍可操作但后台异常;
      2. 目录 ACL 权限错乱:扫描统计有大量临时文件,执行清理空间不释放;
      3. 第三方软件常驻,持续占用临时目录文件:每次清理均跳过,垃圾持续累积;
      4. 组策略强制禁用存储感知:设置页面选项置灰不可操作。

      7 自动化流水线

      两类流水线:①设置 UI 驱动的手动清理流水线;②存储感知后台自动清理流水线;也支持命令 / 脚本调用实现自动化。

      7‑1 存储感知自动清理流水线

      系统定时器 / 磁盘空闲阈值条件达成
      →唤醒 storagesense.dll 后台任务
      →读取注册表配置(启用的清理分类、时间规则)
      →遍历预定义临时文件目录集合
      →过滤受保护、占用文件
      →执行删除操作
      →写入执行日志,更新存储统计缓存

      7‑2 PowerShell 间接自动化流水线(调用存储感知触发清理)

      # 触发一次存储感知手动执行自动清理
      Invoke‑CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense

      7‑3 简化伪代码逻辑

      // 临时文件过滤判断逻辑
      FOR each file in 预定义临时目录:
          IF 文件是系统保护文件:
              continue
          IF 文件被进程占用锁定:
              写入日志:跳过,文件被占用
              continue
          IF 匹配勾选的清理分类:
              delete(file)
      统计释放磁盘空间
      记录本次执行日志

      Windows11 设置里的「临时文件」是UI 展示层 + StorageSense 后台组件的组合;UI 不直接删文件;核心规则写在注册表,扫描删除由 storagesense.dll 完成;对占用文件只跳过不强制结束进程;仅处理系统预定义路径,第三方私有缓存不在处理范围;存储感知属于 “事后清理”,不能阻止临时文件产生。

随着 Windows 系统的发展,磁盘清理工具和临时文件管理功能越来越智能和自动化。Windows 11 将清理和存储管理整合进了更简洁的“存储”设置中,并加强了存储感知功能,使用户可以更加高效地管理磁盘空间。


 

posted @ 2025-05-16 19:24  suv789  阅读(361)  评论(0)    收藏  举报