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

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

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

我安装了 Steam,它在安装后启动 steam.exe 进行自我更新。它似乎通过写入自身的临时副本、启动该副本执行下载,然后覆盖可执行文件的原始副本来实现此目的。在我的情况下,此操作失败,声称无法删除 steam.exe。

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

接下来,我打开 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

编辑: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)

但这些似乎都是针对网络服务的;我没有看到任何与文件系统相关的内容。这些内容会是导致问题的原因吗?

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

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

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

答案1

请执行下列操作:

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

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

这就对了。

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

答案2

KLIF 是 Kaspersky AV 驱动程序。很可能与它有关。

在这种情况下,我的做法是联系卡巴斯基并寻求建议。

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

您提供的 GMER 输出与当前情况无关,因为它只会影响网络连接,而不会影响文件操作。似乎您安装了类似 Kaspersky Internet Security 的程序(或仍将其放在您的机器上)。

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

答案3

这种情况发生在我身上一次,结果是远程计算机打开了共享文件夹。

  1. 使用处理找出哪个进程持有该文件
  2. (就我的情况而言是系统)
  3. 尝试关闭句柄:handle.exe -c E14 -p 4。您的文件句柄将在搜索文件句柄的输出中找到,并且系统的进程 ID 可能相同。
  4. 它输出Error closing handle: T
  5. 谷歌搜索后,我发现这与网络有关
  6. 我在另一台机器上发现,我确实打开了该文件夹。关闭它。一切正常。

答案4

我在尝试重命名文件夹时遇到了这个问题。我必须在执行重命名时停止服务器服务。重新启动并没有帮助,因为系统进程在服务器服务重新启动后立即重新锁定了文件夹。这可能会解决提到的问题这里也一样。

相关内容