首页 > 解决方案 > 如何制作程序来检测实时保护是否开启?

问题描述

我想检测是否打开了实时保护,例如如果用户启动我的程序,它会告诉你 - 你RealTimeProtection打开了并且可能会阻止一些事情!我不知道该怎么做。

标签: c#

解决方案


如果您的唯一目标是检测该选项是启用还是禁用,您最好的办法是找到 Windows 保留该设置的注册表项。

经过一些谷歌搜索后,我们会发现它存储在注册表项HKLM\SOFTWARE\Microsoft\Windows Defender\Real-Time Protection中,DisableRealtimeMonitoring因此使用该信息解决方案变得微不足道。

以下代码在LinqPad中运行时,将输出该注册表项是否存在并且其值是否设置为 1。

请注意,如果您的进程作为 32 位进程运行,我们需要调用OpenBaseKey以获取注册表的 64 位配置单元。

剩下的就直接用OpenSubKeyandGetValue来获取我们需要的信息。

请注意,您没有该密钥的写入权限。你需要先提升才能改变它。

// using Microsoft.Win32;

var path = @"SOFTWARE\Microsoft\Windows Defender\Real-Time Protection";
var key = "DisableRealtimeMonitoring";
var regkey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
if (regkey != null) {
  var subkey = regkey.OpenSubKey(path);
  var val = subkey.GetValue( key );
  if (val != null && val is Int32) {
    var value = (int) val;
    if (value == 1) {
        value.Dump("Protection is off");
    } else {
        value.Dump("Protection is on");
    }
  } else {
     "probably".Dump("Protection is on");
  }
} else {
   "huh?".Dump("key is not found");
}

如果您确实发现他们已禁用此实时保护,请立即警告您的用户。你不希望他们遇到麻烦。


推荐阅读