了解Windows Defender磁盘扫描是否正在运行

时间:2009-05-14 11:16:03

标签: c# windows-vista

Windows Defender磁盘扫描从系统中获得了很多性能。 有没有办法让C#应用程序找出磁盘扫描当前是否正在运行?

2 个答案:

答案 0 :(得分:2)

您可以检查MsMpEng.exe(反恶意软件服务可执行文件)当前正在生成的处理器负载。在我的计算机上,它运行50%CPU(一个CPU核心完全占用),同时观察安装。

它会阻止我的安装程序写入磁盘最多25秒的EXE或DLL文件! (很明显,安装人员正在悬挂。)

请注意,在控制面板中完全关闭WindowsDefender后,MsMpEng.exe甚至正在运行。所以只检查服务是否正在运行是不够的。您必须检查其当前的CPU负载。

Windows Defender在您启动应用程序时每次重新时扫描每个EXE和DLL文件 - 尽管在安装应用程序时它已经扫描了所有这些文件!所以每次启动一个应用程序都会有很大的延迟:应用程序加载的DLL文件越多,速度越慢。

特别是当您的应用程序使用像Themida或WinLicense这样的反盗版保护时,Windows Defender需要非常长时间来检查这些文件。

当您的应用程序仅打开文件而不从其读取或写入一个字节时,Windows Defender扫描每个可执行文件(EXE,DLL),这会导致CreateFile()延迟最多25秒!

很明显,微软没有编写快速高效的反恶意软件的知识。 (我从未见过任何防病毒软件运行25秒来扫描一个文件!)建议安装另一个防病毒程序,这将导致Windows Defender自动被禁用。

当用户打开/关闭Windows Defender时,以下注册表项会更改:

Windows 8关:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdBoot
"Group"= "_Early-Launch"
"Start"= 3   // SERVICE_DEMAND_START
"ImagePath"= "\SystemRoot\system32\drivers\WdBoot.sys"

Windows 8开:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WdBoot
"Group"= "Early-Launch"
"Start"= 0   // SERVICE_BOOT_START
"ImagePath"= "system32\drivers\WdBoot.sys"

请注意,即使启用了WdBoot服务,当您检查其状态时,它通常也不会运行。它似乎只在启动Windows(?)时运行。

Windows 7,Windows 8和Windows 10 Off:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Real-Time Protection
"DisableRealtimeMonitoring"=1

Windows 7,Windows 8和Windows 10开:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Real-Time Protection
"DisableRealtimeMonitoring"=0
// or the entry does not exist

管理员用户无法更改此密钥。写权限仅授予用户" SYSTEM"和团体" WinDefend"和" TrustedInstaller"。

从Windows 10开始,不再可能从使用" System / NT AUTHORITY"运行的服务中写入此值。用户( - >访问被拒绝)。可能Microsoft会检查尝试写入此值的应用程序的数字签名。

在Windows 10上真正糟糕的是,您可以关闭Windows Defender,重新启动计算机,它将再次启用!

还有另一个影响Windows Defender的密钥(默认情况下它不存在,但可以作为普通管理员创建):

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows Defender
"DisableAntiSpyware" = 1

此密钥的效果是您点击" Windows Defender"在控制面板中,您会看到一个消息框告诉:"此应用程序已被组策略关闭.....要允许此应用程序运行,请与安全管理员联系以通过组策略启用该程序。&#34 ;

请注意,此键可以不关闭 Windows Defender。它仅禁止用户打开Windows Defender配置面板(MsAscUi.exe)。

答案 1 :(得分:-1)

使用Internet Explorer的示例:

Process[] ProcInfo = System.Diagnostics.Process.GetProcessesByName("iexplore");