Windows 11 在 USB 存储驱动器拔出后仍将其保留为隐藏的非当前设备 昨天,我写了 Windows 如何保留已删除照片的缩略图。一位准备捐出旧 Windows 笔记本电脑的朋友(考虑到目前的内存价格,这可是一份慷慨的礼物)担心地问我,重置电脑是否足够,以及 Windows 是否会暗中保留他的一些数据。
社交媒体上关于 Windows 的危言耸听言论并不新鲜。一些走红的帖子声称,Windows 会永久记录你曾经插入过的每一个 USB 设备,即使设备已经被拔出。这个说法确实有 Windows 的实际行为作为依据,但这些博取关注的帖子把事情描述得比实际情况可怕得多。
一则走红帖子截图,显示 Windows 即使在 USB 驱动器被移除后仍会存储其名称Linux 和 macOS 同样会维护硬件的设备信息和系统日志。而且,Microsoft 对这一行为的说明已有十多年历史。
下面将介绍 Windows 会记住你插入过的 USB 驱动器的哪些信息、这样做的原因、如何自行查看,以及重置电脑后这些记录会发生什么。
早在 2012 年,Microsoft 首席现场工程师 Jason Walker 就在 Microsoft 的 Scripting Blog 上写道:“当 USB 存储设备插入计算机时,注册表中会创建 USBSTOR 项,操作系统需要了解的有关该存储设备的所有信息都包含在该项中。”
该项的完整路径如下:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR。
Microsoft 关于删除旧设备注册表信息的支持文档解释了 Windows 为何会继续保留这一项。当存储设备连接后,“即使只连接了很短时间,Windows 也会为该设备创建注册表信息”,而清理工作则交由其他软件完成,因为“Windows 不知道存储设备是暂时移除还是永久移除。”
当你拔出 U 盘时,Windows 显然无法判断你是否会在明天再次插入它,因此,即插即用会保留该设备实例,以便你再次连接 U 盘时识别并配置驱动器。
Microsoft 甚至为这些残留项取了一个名称。已从物理上移除但注册表项尚未删除的设备被称为非当前设备,或幽灵设备。你可以在设备管理器中选择查看 > 显示隐藏的设备来查看它们。
设备管理器中的显示隐藏设备设置。图片来源:Windows Latest不过,USBSTOR 并不是你插入 Windows 电脑的所有 USB 设备的列表。它涵盖由 Usbstor.sys 驱动程序处理的大容量存储设备。对于使用较新 USB Attached SCSI 协议的设备,Windows 还提供了独立的 UASP 存储驱动程序 Uaspstor.sys,该协议旨在提升存储性能。你的键盘、摄像头、USB 鼠标或 USB 麦克风不会出现在 USBSTOR 中。我目前正在使用其中一些设备,而 USBSTOR 并不会显示它们。
磁盘驱动器中的幽灵设备。图片来源:Windows Latest人们很容易将其视为 Windows 独有的问题,但事实是,Linux 的 udev 会维护一个已处理设备的数据库,macOS 也会通过 IOKit 维护硬件信息,并通过统一日志系统记录系统事件。这些操作系统需要识别硬件、加载正确的驱动程序,并在出现问题时帮助你进行故障排除。
所以,Windows 确实会记住 USB 驱动器。但真正有用的问题是:它记住了哪些信息。
Windows 可以存储可读的设备名称,例如“SanDisk Ultra USB Device”,以及根据设备报告的信息生成的硬件标识符和实例标识符。根据设备不同,实例标识符可能包含序列号信息或位置信息,还可能记录驱动器首次设置的时间、上次连接或移除的时间,以及分配到的驱动器号。
不过,这里所说的 USBSTOR 记录不包含驱动器上曾经存在的文件列表,而且这些记录本身也无法显示文件是否被复制。Windows 的其他功能可能会留下独立的证据,例如“最近使用的项目”或可移动存储审核记录。
要查看相关记录,请打开 Windows PowerShell 并运行以下命令。
reg query “HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR” /s
/s 开关会查询 USBSTOR 下的所有子项。每个型号项中都包含设备实例子项。根据设备不同,实例标识符可能包含序列号信息或位置信息。不过,仅凭 SanDisk 名称无法证明某一个特定 U 盘曾经连接过,因为不同驱动器可能共享硬件 ID,而且 USB 设备也不一定会报告序列号。
如果想获得更简洁的列表,可以使用 PowerShell 的即插即用 cmdlet。
Get-PnpDevice -Class DiskDrive |
Where-Object { $_.InstanceId -like ‘USBSTOR\*’ } |
Format-List Status, FriendlyName, InstanceId
Get-PnpDevice 会显示即插即用已知的设备,无论设备当前是否存在,除非添加 -PresentOnly 参数,这正好可以用于测试。插入 USB 驱动器,运行该命令,并记下其 InstanceId。然后安全弹出驱动器并将其拔出,再运行上面的命令以及下面这条命令。
Get-PnpDevice -PresentOnly -Class DiskDrive |
Format-List FriendlyName, InstanceId
如果 Windows 保留了该记录,驱动器会从 -PresentOnly 列表中消失,但仍会保留在第一个列表中。
要查看时间戳,请将该 InstanceId 粘贴到 $deviceId 中,然后运行以下命令:
$deviceId = ‘PASTE_THE_FULL_INSTANCE_ID_HERE’
Get-PnpDeviceProperty -InstanceId $deviceId |
Where-Object { $_.KeyName -match ‘_(FirstInstallDate|InstallDate|LastArrivalDate|LastRemovalDate)$’ } |
Format-List KeyName, Data
FirstInstallDate 是 Windows 首次安装该设备实例的时间。InstallDate 是最近一次安装的时间,Microsoft 表示该时间戳会在每次驱动程序更新时发生变化。LastArrivalDate 和 LastRemovalDate 都只是单个值,因此,这些字段都无法提供驱动器每次插入的完整历史记录。
Windows 还会将设备安装信息写入纯文本 SetupAPI 日志,路径为 %SystemRoot%\INF\setupapi.dev.log。你可以在其中搜索该驱动器。
Select-String -Path “$env:SystemRoot\INF\setupapi.dev.log” -SimpleMatch -Pattern $deviceId -Context 3,12
如果匹配成功,说明 SetupAPI 记录了该设备的一次安装事件。但不应将其视为该设备之后每次连接的完整记录。
最后,reg query “HKLM\SYSTEM\MountedDevices” 会显示挂载管理器的持久名称数据库,该数据库将卷映射到驱动器号,并可能保留已不在系统中的卷名称。像 \DosDevices\F: 这样的项,只有将其二进制数据与该设备的卷进行匹配后,才能确定它对应的是 SanDisk 驱动器。
要删除某个驱动器的记录,请在设备管理器的隐藏设备视图中右键单击灰显的驱动器,然后选择卸载设备。
如何移除幽灵 USB 驱动器。图片来源:Windows LatestMicrosoft 表示,设备卸载后,其注册表项会自动删除。IT 管理员还可以使用 Microsoft 的 DevNodeClean 工具批量清除幽灵存储项。请不要删除 USBSTOR 项,因为这可能导致电脑无法正常运行。
对于我朋友的笔记本电脑,Microsoft 表示,在重置 Windows 时,“删除所有内容”会“重新安装 Windows,并删除所有个人文件、应用和设置”,适合“准备赠送或出售电脑”的情况。其一键重置文档称,该选项会为电脑“回收或转移所有权”做好准备。由于操作系统会重新安装,旧的 USBSTOR 记录不应被保留。
但这里有一个需要注意的地方。Microsoft 表示,重置不会格式化 Windows 卷,而是逐个删除用户文件。因此,在交出笔记本电脑前,请在“更改设置”中启用“清理数据”。Microsoft 表示,该功能“会让其他人更难恢复你删除的文件”,但同时也指出,该功能“不符合政府和行业的数据擦除标准。”如果笔记本电脑还有第二个分区,也应选择从所有驱动器中删除文件的选项。
Windows 会出于正当原因保留大量元数据,例如文件系统隧道功能会让新文件沿用已删除文件的创建日期。正确执行“删除所有内容”重置会移除旧的 Windows 安装及其数据,但不应将其描述为通用的取证级数据擦除工具。
USB 记录能证明有人复制过文件吗?
至于 USB 记录可以证明数据被盗这一说法,答案是否定的。USBSTOR 项可以显示 Windows 曾识别过某个特定设备。但仅凭这一点,无法判断复制了哪些文件、数据是传入还是传出该设备,也无法判断是谁实际连接了设备。
Windows 可以通过“审核可移动存储”策略记录可移动驱动器上的文件访问,并生成类似 4663 的事件,但前提是该策略在相关操作发生前已经启用。事后启用并不会生成此前活动的记录。
一则社交媒体帖子,声称 Windows 会永久记录你曾经插入过的每一个 USB 设备。这些走红帖子抓住了一个基本事实:与其他主流桌面操作系统一样,Windows 会在 USB 存储设备拔出后记住它。但 USBSTOR 记录不包含驱动器内容;仅凭该记录无法证明有人复制过文件。独立的审核记录或其他取证证据可能提供文件访问证据,但这与 USBSTOR 记录是两回事。最后,这些记录也不是永久存在的。