Обнаружение антивируса в Windows с помощью C # [закрыто]

Есть ли способ определить, установлено ли на компьютере антивирусное программное обеспечение с использованием C #? Я знаю, что Центр безопасности обнаруживает антивирусное программное обеспечение, но как вы можете обнаружить это в C #?

 TechBrkTru08 июн. 2015 г., 10:26
есть ли способ узнать, обновлен ли антивирус в системе в windows [email protected]
 SLaks26 авг. 2009 г., 03:33
Вы можете использовать WMI; увидетьВот.

Ответы на вопрос(3)

Решение Вопроса

Центр безопасности Windows использует двухуровневый подход для определения статуса. Один уровень является ручным, а другой - автоматическим через инструментарий управления Windows (WMI). В режиме ручного обнаружения Центр безопасности Windows выполняет поиск разделов реестра и файлов, предоставляемых Microsoft независимыми производителями программного обеспечения. Эти разделы реестра и файлы позволяют Windows Security Center определять состояние независимого программного обеспечения. В режиме WMI производители программного обеспечения определяют свое собственное состояние продукта и сообщают об этом состоянии обратно в Центр безопасности Windows через поставщика WMI. В обоих режимах Windows Security Center пытается определить, верно ли следующее:

Антивирусная программа присутствует.

Антивирусные сигнатуры актуальны.

Сканирование в реальном времени или сканирование при доступе включено для антивирусных программ.

Для брандмауэров Центр безопасности Windows определяет, установлен ли сторонний брандмауэр и включен ли брандмауэр.

Таким образом, чтобы определить наличие антивирусного программного обеспечения, вы можете использовать WMI для подключения кroot\SecurityCenter пространство имен (начиная с Windows Vista, вы должны использоватьroot\SecurityCenter2 пространство имен), а затем запроситьAntiVirusProduct WMI класс.

Посмотрите на этот пример кода

using System;
using System.Text;
using System.Management;

namespace ConsoleApplication1
{
  class Program
  {
    public static bool AntivirusInstalled()
    {

      string wmipathstr = @"\\" + Environment.MachineName + @"\root\SecurityCenter";
      try
      {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipathstr, "SELECT * FROM AntivirusProduct");
        ManagementObjectCollection instances = searcher.Get();
        return instances.Count > 0;
      }

      catch (Exception e)
      {
        Console.WriteLine(e.Message);
      }

      return false;
    } 

    public static void Main(string[] args)
    {
      bool returnCode = AntivirusInstalled();
      Console.WriteLine("Antivirus Installed " + returnCode.ToString());
      Console.WriteLine();
      Console.Read();
    }

  }
}
 bazzinga26 июн. 2013 г., 19:46
@RRUZ да, это последнее средство .. я надеялся найти другой способ сделать это ..
 bazzinga26 июн. 2013 г., 16:15
Хорошо, спасибо. Есть ли способ найти антивирус на сервере?
 bazzinga25 июн. 2013 г., 21:54
Я попробовал это на Windows Server 2008. Однако, я получаю исключение "Неверное пространство имен ", Работает на Windows 7.
 aHunter09 окт. 2009 г., 00:45
Кто-нибудь, как это сделать на Windows 7?
 bazzinga26 июн. 2013 г., 18:30
@RRUZ Я уже попробовал это .. это не 'т работает .. там написано .. классы securityCenter и securityCenter2 не доступны для серверных выпусков
 RRUZ07 февр. 2011 г., 16:17
В Windows 7 вы должны использовать\root\SecurityCenter2 Пространство имен
 RRUZ26 июн. 2013 г., 17:19
@RahilMansuri, попробуй этоstackoverflow.com/questions/13732351/...
 RRUZ26 июн. 2013 г., 18:47
Проверьте принятый ответ... I ended up performing a dictonary search on the local system drivers and processes looking for a pattern of know anti-virus signatures (such as folder names, processes names, etc...)
 RRUZ25 июн. 2013 г., 22:07
Эти классы доступны только в выпусках Windows Desktop.
 TechBrkTru05 июн. 2015 г., 15:57
Есть ли способ получить информацию об обновлении антивирусной версии в Win 7 @RRUZ?
 Digvijay Rathore02 нояб. 2015 г., 11:25
Что, если я хочу добавить эти данные для моего собственного антивирусного продукта, есть ли способ вставить его ???

Попробуйте эту часть \ root \ SecurityCenter2 вместо \ root \ SecurityCenter

Результаты немного отличаются. Вы все еще можете получить отображаемое имя, но выВам нужно будет сделать небольшую битовую маскировку для поля ProductState, чтобы определить, включен ли / выключен onAccessScanner, и информацию типа upToDate.

C:\Windows\System32\wbem\wscenter.mof Блокнотом Это поможет вам, какие пространства имен и классы существуют:

C # Запрос:

// SELECT * FROM AntiVirusProduct
// SELECT * FROM FirewallProduct
// SELECT * FROM AntiSpywareProduct
ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter2", "SELECT * FROM AntiVirusProduct");
ManagementObjectCollection data = wmiData.Get();

foreach (ManagementObject virusChecker in data)
{
    var virusCheckerName = virusChecker["displayName"];
}

wscenter.mof:

#pragma autorecover
#pragma classflags(64)
#pragma namespace("\\\\.\\root")

[NamespaceSecuritySDDL("O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:(A;CI;0x1;;;BU)(A;CI;0x1;;;BA)(A;CI;0x1;;;NS)(A;CI;0x1;;;LS)(A;CI;0x1;;;AU)(A;CI;0x6001D;;;S-1-5-80-3232712927-1625117661-2590453128-1738570065-3637376297)")] 
Instance of __namespace
{
  Name = "SecurityCenter";
};

[NamespaceSecuritySDDL("O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:(A;CI;0x1;;;BU)(A;CI;0x1;;;BA)(A;CI;0x1;;;NS)(A;CI;0x1;;;LS)(A;CI;0x1;;;AU)(A;CI;0x6001D;;;S-1-5-80-3232712927-1625117661-2590453128-1738570065-3637376297)")] 
Instance of __namespace
{
  Name = "SecurityCenter2";
};
#pragma namespace("\\\\.\\root\\SecurityCenter")

class AntiVirusProduct
{
  [key,Not_Null] string instanceGuid;
  [Not_Null] string displayName;
  [Not_Null] boolean productUptoDate;
  boolean onAccessScanningEnabled;
  boolean productHasNotifiedUser;
  boolean productWantsWscNotifications;
  uint8 productState;
  string companyName;
  string versionNumber;
  string pathToSignedProductExe;
};

class FirewallProduct
{
  [key,Not_Null] string instanceGuid;
  [Not_Null] string displayName;
  boolean enabled;
  boolean productHasNotifiedUser;
  boolean productWantsWscNotifications;
  uint8 productState;
  string companyName;
  string versionNumber;
  string pathToSignedProductExe;
};

class AntiSpywareProduct
{
  [key,Not_Null] string instanceGuid;
  [Not_Null] string displayName;
  [Not_Null] boolean productUptoDate;
  boolean productEnabled;
  boolean productHasNotifiedUser;
  boolean productWantsWscNotifications;
  uint8 productState;
  string companyName;
  string versionNumber;
  string pathToSignedProductExe;
};
#pragma namespace("\\\\.\\root\\SecurityCenter2")

class AntiVirusProduct
{
  [key,Not_Null] string instanceGuid;
  [Not_Null] string displayName;
  [Not_Null] string pathToSignedProductExe;
  [Not_Null] string pathToSignedReportingExe;
  [Not_Null] uint32 productState;
  string timestamp;
};

class FirewallProduct
{
  [key,Not_Null] string instanceGuid;
  [Not_Null] string displayName;
  [Not_Null] string pathToSignedProductExe;
  [Not_Null] string pathToSignedReportingExe;
  [Not_Null] uint32 productState;
  string timestamp;
};

class AntiSpywareProduct
{
  [key,Not_Null] string instanceGuid;
  [Not_Null] string displayName;
  [Not_Null] string pathToSignedProductExe;
  [Not_Null] string pathToSignedReportingExe;
  [Not_Null] uint32 productState;
  string timestamp;
};
#pragma autorecover

Ваш ответ на вопрос