为什么系统会在应用程序退出后继续锁定可执行文件句柄?

DNS*_*DNS 26 windows windows-7 permissions

我在 Windows 7 机器上看到了奇怪的行为;似乎当一个可执行文件运行时,SYSTEM 会在接下来的一分钟左右保持打开它的句柄。这是我最近的遭遇:

我安装了 Steam,它会在安装后启动 steam.exe 以进行自我更新。它似乎是通过编写自己的临时副本,启动它来执行下载,然后覆盖可执行文件的原始副本来做到这一点的。在我的情况下,这失败了,声称无法删除 steam.exe。

我打开文件夹并尝试手动删除steam.exe,但Windows声称我没有权限。我的帐户是管理员,并且是这台机器上唯一的用户帐户。但以防万一,我以管理员身份启动了资源管理器,但仍然无法删除该文件。我将文件的“属性”调到“安全”选项卡,但它只显示一条消息,指出我没有查看权限的权限。

接下来,我打开 Process Explorer 以查看是否有任何内容锁定了文件。SYSTEM (PID 4) 确实如此,但是当我尝试关闭文件句柄时,它产生了一个错误,指出句柄无效。我试图查看文件句柄属性,但我也没有权限这样做。

我已经终止了除不可终止的系统进程之外的所有内容,并停止了我能够执行的所有服务,包括与 AV 和防火墙相关的所有内容,但问题仍然存在。我曾尝试使用“takeown”让自己拥有该文件的所有权,但它声称我无权这样做。其他人声称使用名为“Unlocker”的工具取得了成功,但它在关闭文件句柄时遇到了与 Process Explorer 相同的问题。

我很久以前禁用了 Windows 索引和搜索,并从索引中排除了 C:\,所以这个问题的答案不适用于我。

每次大约一分钟后,句柄消失,文件立即被删除;显然,更新程序删除它的尝试排队并在文件不再锁定后最终完成。不幸的是,更新已经终止,无法恢复。当我重新安装时,它当然会再次尝试运行 steam.exe,然后我又回到了原点。

我的问题是:为什么这些手柄会四处游荡,我该如何防止它们这样做?

编辑:以下是评论中要求的其他信息:

C:\>fltmc instances
Filter                Volume Name                              Altitude        Instance Name      Frame  VlStatus
--------------------  -------------------------------------  ------------  ---------------------  -----  --------
KLIF                  \Device\Mup                             320400       KLIF                     0
KLIF                  C:                                      320400       KLIF                     0
KLIF                                                          320400       KLIF                     0
luafv                 C:                                      135000       luafv                    0
FileInfo              \Device\Mup                              45000       FileInfo                 0
FileInfo              C:                                       45000       FileInfo                 0
FileInfo                                                       45000       FileInfo                 0
Run Code Online (Sandbox Code Playgroud)

编辑:GMER 表明我的防病毒软件(卡巴斯基)在某种程度上仍然处于活动状态,尽管从它自己的 GUI 中禁用了它,并且它的服务被停止了。

AttachedDevice  \Driver\tdx \Device\Ip     kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\Tcp    kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\Udp    kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\RawIp  kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
Run Code Online (Sandbox Code Playgroud)

但这些似乎都是为了网络服务;我没有看到任何与文件系统相关的内容。这些中的任何一个可能是问题的原因吗?

编辑:我禁用了卡巴斯基 KLIF 过滤器,但锁定问题仍然存在。

编辑:我通过安装解决了 Steam 的特定问题,在它可以启动 steam.exe 之前强制终止安装程序,然后在安全模式下重新启动并在那里运行它。因此,显然在安全模式下不存在锁定可执行文件的任何内容。

虽然我已经解决了这个特殊情况,但问题也出现在其他地方,所以我仍然想了解发生了什么。

小智 21

请执行下列操作:

  1. 在有问题的位置禁用索引。

  2. 启用“应用体验”服务并将其设置为“自动”。

这就对了。

如果您的问题仍然存在,则可能是 Superfetch,尽管禁用它并没有给我带来任何运气。

  • #2(启用“应用程序体验”服务)对我有用,谢谢!调试我的 LIVEditor(实时 html 编辑器)软件时真的很痛苦,因为我必须反复重新编译 EXE。 (5认同)

0xC*_*22L 6

KLIF 是卡巴斯基 AV 驱动程序。很有可能与它有关。

在这种情况下,我的行动方针是联系卡巴斯基并寻求建议。

但是,您可以先尝试另一件事:HKLM\SYSTEM\CurrentControlSet\Services通过查找KLIF或类似于键名的内容并将REG_DWORD名为的值设置为(这意味着禁用)Start来禁用驱动程序(在 下4),然后重新启动。这应该会阻止加载 KAV 过滤器驱动程序。然后您可以使用它fltmc来验证结果。

您提供的 GMER 输出与手头的案例无关,因为它只会影响网络连接,而不影响文件操作。您似乎安装了卡巴斯基安全软件之类的东西(或者它仍然在您的机器上处于休眠状态)。

编辑:仅供参考luafv,与 UAC 一起负责 FS 虚拟化。即,如果您无权访问某个文件,则该文件将被放入您的个人资料中的一个单独文件夹中。FileInfo属于 SuperFetch - 这实际上可能是您问题的一部分,但我自己在 Windows 7 上没有遇到类似的问题。通常不建议禁用 SuperFetch,尽管可以。