我在修复我的机器上的奇怪行为时遇到了一些麻烦。
问题
每次我在窗口提示符上运行一些“外部”(非本机)命令时,都会出现某种延迟,直到控制权返回给我。
命令本身正常执行,其输出也立即显示出来。但是,光标会一直闪烁 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
。
笔记:
- 我的 Windows 7 机器上不存在此密钥。
- 我想不出有什么理由
git
要摆弄这些注册表项。 - 已知有些病毒可以读取这个特定的密钥...
您可以尝试删除此密钥(当然,首先要确保您有足够的备份)