执行“外部”命令后延迟返回提示控制

执行“外部”命令后延迟返回提示控制

我在修复我的机器上的奇怪行为时遇到了一些麻烦。

问题

每次我在窗口提示符上运行一些“外部”(非本机)命令时,都会出现某种延迟,直到控制权返回给我。

命令本身正常执行,其输出也立即显示出来。但是,光标会一直闪烁 2~5 秒,直到控制权交还给我,我才能执行新的命令。

在此处输入图片描述

在命令输出之间获取

在使用 GIT 时,我注意到每个命令和我在命令提示符中运行都存在一些延迟。

观察结果

  • 它影响所有类型的 shell:Cmd、Powershell、Cygwin、GitBash

  • git status即使是在空目录git --version或之类的简单命令中也会发生这种情况java -version

  • 如果我以安全模式启动 Windows,则不会发生这种情况

  • 即使禁用防病毒软件(赛门铁克),也会出现问题。

进程监控

我安装了进程监视器,这是输出

16:37:09,5998830    git.exe 64492   Thread Exit
16:37:09,5999292    git.exe 64492   Thread Exit
16:37:09,5999680    git.exe 64492   Thread Exit
16:37:09,6000019    git.exe 64492   Thread Exit
16:37:11,6676766    git.exe 64492   RegOpenKey  HKLM\Software\Microsoft\Windows NT\CurrentVersion\GRE_Initialize
16:37:11,6676991    git.exe 64492   RegQueryValue   HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize\DisableMetaFiles
16:37:11,6677136    git.exe 64492   RegCloseKey HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize
16:37:11,6678039    git.exe 64492   RegCloseKey HKCU\Software\Classes\Local Settings\Software\Microsoft
16:37:11,6678144    git.exe 64492   RegCloseKey HKCU\Software\Classes\Local Settings
16:37:11,6678268    git.exe 64492   RegCloseKey HKLM\SOFTWARE\Microsoft\Ole
16:37:11,6678412    git.exe 64492   RegCloseKey HKLM
16:37:11,6680708    git.exe 64492   Thread Exit
16:37:11,6700179    git.exe 64492   Process Exit

Thread Exit在该日志中,我可以看到和之间有 2 秒的延迟RegCloseKey。所以,我猜问题就在这里…… 某些东西导致了线程退出和进程退出之间的延迟。当我运行 时,这也是同样的行为java -version

有谁知道发生了什么事或者我该如何解决这个问题?

答案1

有谁知道发生了什么事或者我该如何解决这个问题?

通过修改注册表项可以关闭 GDI 元文件的处理HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize\DisableMetaFiles

很久以前(2008 年)当存在内核漏洞时就建议设置DisableMetaFiles为。1

如果成功利用该漏洞,攻击者可以执行所选代码来提升受影响系统上的权限。

关闭图元文件处理可能会导致软件或系统组件的外观质量下降。关闭图元文件处理还可能导致软件或系统组件完全失效。示例包括以下内容:

  • 您无法在计算机上打印。
  • 计算机上的某些应用程序可能无法显示剪贴画。
  • 某些涉及 OLE 渲染的场景可能会中断。特别是当对象服务器未处于活动状态时,会发生此问题。

重要提示:如果在主动攻击期间无法快速部署最新的 GDI 安全更新,则这仅作为紧急措施。关闭所有元文件处理尚未经过全面测试。您应尽快将此设置改回零 (0),并安装最新的 GDI 安全更新,以帮助提高安全性并恢复完整功能。

来源可以使用注册表项来关闭元文件的处理

当然,这个漏洞随后被修补了,但是由于这个密钥在系统上每个命令行程序的退出时都会被读取,所以可能是安装了某些东西,这些东西会挂接到你的系统中,检查该值是否仍然设置为1

笔记:

  1. 我的 Windows 7 机器上不存在此密钥。
  2. 我想不出有什么理由git要摆弄这些注册表项。
  3. 已知有些病毒可以读取这个特定的密钥...

您可以尝试删除此密钥(当然,首先要确保您有足够的备份)

相关内容