系统学习
学习路径总入口:先选领域,再建立模型,最后用故障演练验证
→
Windows 心智模型:盘符、注册表、服务、UAC、计划任务与 WSL
一句话模型
Windows 用盘符和命名空间组织路径,用注册表集中配置,用 SCM 管理后台服务,用令牌和 ACL 划分权限,再由计划任务和 WSL 把自动化与跨系统能力接进来。
核心概念
1. 盘符与路径
- 卷与盘符:卷是存储单元,盘符只是指向卷的命名入口;同一卷可以挂到目录,网络共享也可以映射成盘符,但盘符不是存储本身。
- 目录树与当前目录:每个盘符各有自己的当前目录;
C: 切换盘符,cd 改变当前目录,相对路径始终相对当前目录解析。
- UNC 与设备路径:
\\server\share 是网络命名空间,\\?\C:\... 绕过部分 Win32 路径规范化,\\.\ 指向设备;它们和普通 C:\ 不是同一层抽象。
- 大小写、保留名与链接:NTFS 默认不区分大小写但保留原始大小写;
CON、NUL、COM1 是设备名;符号链接、junction 和硬链接会改变路径解析结果。
- 关系:路径属于 NT 命名空间,盘符是 Win32 层的便利映射;权限在最终对象上评估,不在盘符字符串上评估。
2. 注册表
- 配置单元(hive):HKLM 是机器级,HKCU 是当前用户,HKCR 是软件关联的合并视图,HKU 挂载各用户配置,HKCC 是当前硬件配置。
- 键与值:注册表是层级数据库,键像目录,值有名称、类型和数据;不是所有“设置”都在这里,很多应用用自己的配置文件。
- 32/64 位视图:64 位系统上,32 位程序看到重定向后的
WOW6432Node 等位置;查错时要确认自己是从哪个位数和哪个账户看的。
- 权限、所有者与策略:每个键有 ACL 和所有者,HKLM 的许多位置由 SYSTEM 或 TrustedInstaller 控制;组策略值通常覆盖用户设置。
- 关系:注册表是配置的集中索引,不是运行时状态的全部;改完是否生效取决于组件何时重新读取,服务通常要重启。
3. 服务
- SCM 与服务进程:服务控制管理器(
services.exe)维护服务数据库、启动类型和控制协议;服务是受 SCM 管理的可执行体,不等于普通用户进程。
- 服务账户:LocalSystem 在本机权限很大并以机器身份访问网络,NetworkService 以机器身份访问网络,LocalService 权限更小;还有虚拟账户和 gMSA。
- 启动、恢复与依赖:自动、自动(延迟)、手动、禁用决定何时启动;失败后的恢复动作、依赖关系和重启策略决定故障扩散范围。
- svchost 与 Session 0:多个系统服务可共享一个
svchost.exe 进程;服务运行在 Session 0,不能直接和登录用户桌面交互,需要界面的程序不应做成服务。
- 关系:SCM 启动服务宿主,服务再创建工作线程或子进程;停止服务会先处理依赖服务,但不保证所有子孙进程都被清理。
4. UAC
- 双令牌:管理员登录后同时拥有过滤令牌(中等完整性)和提升令牌(高完整性);普通操作默认用过滤令牌,提权才换令牌。
- 同意提示与安全桌面:需要提升时出现 UAC 提示,安全桌面防止其他进程伪造点击;提示的是“是否允许使用管理员权限”,不是重新登录。
- 完整性级别:低、中、高、系统等级限制进程能写哪里、能向谁发送消息;浏览器保护模式常用低完整性。
- 虚拟化与边界:旧程序写 HKLM 或 Program Files 被拒绝时,UAC 可能把写入重定向到用户虚拟存储;在 Administrators 组里也不等于当前进程已提权,而且 UAC 主要防误操作,不应被当作安全边界。
- 关系:UAC 改的是进程令牌和完整性级别,不是用户身份;同一用户的不同进程可以拥有不同令牌和文件访问范围。
5. 计划任务
- 任务计划程序服务:任务定义通常存在
C:\Windows\System32\Tasks,由 Task Scheduler 服务按触发器启动,支持 XML 导入导出。
- 触发器、操作、条件:触发器决定何时,操作决定运行什么,条件决定只在空闲、接电源或网络可用时是否执行;三者共同决定实际行为。
- 主体(principal):任务以哪个用户或组运行、是否使用最高权限、是仅在登录时运行还是无论是否登录都运行,决定它的令牌和文件访问范围。
- 会话、错过与唤醒:交互式任务在用户会话里运行,能显示界面;后台任务通常看不到桌面;关机、休眠、断网会影响触发,是否补跑和唤醒要逐项检查。
- 关系:触发器只负责“叫醒”任务,真正的权限来自 principal;任务失败要同时看历史记录、操作程序和它启动的子进程。
6. WSL
- 发行版与版本:每个 WSL 发行版是独立环境;WSL1 把 Linux 系统调用翻译到 Windows 内核,WSL2 在轻量虚拟机里运行真实 Linux 内核。
- 文件系统边界:WSL2 的根文件系统在
ext4.vhdx 里,Windows 盘通过 /mnt/c 挂载;跨系统访问有额外开销,Linux 元数据语义也不同。
- 互操作:Linux 里能执行
.exe,Windows 里能执行 wsl.exe;PATH、当前目录和换行符在边界两侧按各自规则解释。
- 网络与配置:WSL2 默认使用 NAT,Windows 访问 Linux 服务常可直接用
localhost,反向访问要用主机地址;.wslconfig 是全局配置,/etc/wsl.conf 是单个发行版的配置。
- 关系:WSL 服务管理虚拟机和发行版,发行版内部再由 Linux 的 init/systemd 管理进程;Windows 盘是挂载进来的外部文件系统,不是 Linux 根文件系统的一部分。
常见误解
- 把盘符当成磁盘本身,忽略挂载点、网络映射和每盘独立的当前目录。
- 认为注册表就是全部配置,忽略应用配置文件、环境变量和组策略的覆盖关系。
- 把服务当成普通后台程序,忽略 SCM、服务账户、Session 0 和依赖关系。
- 认为在 Administrators 组里就已经提权,忽略过滤令牌和 UAC 提示。
- 把 WSL 当双系统或完整 Linux 服务器,忽略共享内核、
/mnt/c 性能和独立的网络命名空间。
参考链接
读完自测
- 为什么在普通窗口映射的网络盘,在“以管理员身份运行”的窗口里可能看不到?
- 服务以 LocalSystem 运行,和用户登录后运行同一个程序,权限与网络身份有什么不同?
- WSL2 访问
/mnt/c 为什么比访问 Linux 家目录慢?这对项目布局有什么影响?
答案
- 映射盘依附于登录会话和令牌上下文,提升后的进程使用不同令牌,默认看不到非提升会话建立的映射;这不是磁盘故障。
- LocalSystem 在本机拥有很高权限,并以机器账户身份访问网络;用户程序使用用户令牌,受 UAC、ACL 和登录会话限制,网络身份是用户。
/mnt/c 经过 Windows 与 Linux 之间的文件共享层,元数据和小文件操作开销大;代码和依赖应放 Linux 家目录,Windows 文件按需访问。
相关条目