Czy istnieje sposób sprawdzenia, czy na komputerze jest zainstalowane oprogramowanie antywirusowe używające C#? Wiem, że Centrum zabezpieczeń wykrywa oprogramowanie antywirusowe, ale jak wykryć to w C#?Wykrywanie programu antywirusowego w systemie Windows przy użyciu C#
Odpowiedz
Według firmy Microsoft Centrum zabezpieczeń systemu Windows używa dwuwarstwowego podejścia do statusu wykrywania. Jedna warstwa jest ręczna, a druga warstwa jest automatyczna za pomocą Instrumentacji zarządzania Windows (WMI). W trybie wykrywania ręcznego Centrum zabezpieczeń systemu Windows wyszukuje klucze rejestru i pliki dostarczane firmie Microsoft przez niezależnych producentów oprogramowania. Te klucze i pliki rejestru umożliwiają programowi Windows Security Center wykrywanie statusu niezależnego oprogramowania. W trybie WMI producenci oprogramowania określają swój status produktu i raportują go z powrotem do Centrum zabezpieczeń systemu Windows za pośrednictwem dostawcy WMI. W obu trybach Centrum zabezpieczeń systemu Windows próbuje ustalić, czy spełnione są następujące warunki:
Program antywirusowy jest obecny.
Podpisy sygnatur antywirusowych są aktualne.
Skanowanie w czasie rzeczywistym lub skanowanie podczas uzyskiwania dostępu jest włączone w przypadku programów antywirusowych.
W przypadku zapór sieciowych Centrum zabezpieczeń systemu Windows wykrywa, czy jest zainstalowany firewall innej firmy i czy zapora jest włączona, czy też nie.
Zatem w celu ustalenia obecność oprogramowania antywirusowego, można użyć WMI wykonaniu połączenia do nazw root\SecurityCenter
(począwszy od systemu Windows Vista należy użyć nazw root\SecurityCenter2
), a następnie zapytać o klasie AntiVirusProduct
WMI.
Spójrz na ten przykładowy kod
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();
}
}
}
Kwerenda WMI zmienia się nieznacznie w Vista SP2 i poza nią.
Spróbuj tej części \ root \ SecurityCenter2 zamiast \ root \ SecurityCenter
Wyniki są nieco inne, jak również. Nadal możesz uzyskać nazwę wyświetlaną, ale musisz wykonać trochę maskowania dla pola ProductState, aby określić, czy onAccessScanner jest włączony/wyłączony i jakie są informacje typu upToDate.
Otwórz C:\Windows\System32\wbem\wscenter.mof
przez Notatnik. To pomaga których przestrzenie nazw i klas istnieje:
C# Query:
// 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
- 1. Wykrywanie procesu jest już uruchomione w systemie Windows przy użyciu C# .net
- 2. Wyjście Unicode na konsolę Przy użyciu C++, w systemie Windows
- 3. Jak wymusić wykrywanie ekranu w systemie Windows?
- 4. Pobieranie aktualizacji systemu Windows przy użyciu C#
- 5. Konfigurowanie programu Logstash w systemie Windows
- 6. Kończenie chronionego procesu antywirusowego
- 7. Nawiązanie połączenia z wystąpieniem programu SQL Server przy użyciu pymssql w systemie Windows
- 8. Tworzenie pliku Mac .app w systemie Windows przy użyciu Mono
- 9. Instalowanie programu Qt Creator przy użyciu MinGW
- 10. Docker: Udostępnianie woluminu w systemie Windows przy użyciu przybornika Docker
- 11. Wykrywanie IE6 przy użyciu jQuery.support
- 12. „Permission denied” przy użyciu Cygwin w Windows
- 13. Wykrywanie wycieków pamięci pod Windows dla GNU C/C++
- 14. Wykrywanie ról serwera zainstalowanych w systemie Windows Server 2012
- 15. Platforma (OS) wykrywanie w systemie
- 16. Jak ustawić domyślną przeglądarkę w Windows 8 przy użyciu C#?
- 17. Jak uzyskać adres MAC interfejsu w systemie Linux przy użyciu programu C?
- 18. Wykrywanie programu ASP.NET Core 1.0
- 19. Jak wyłączyć menu kontekstowe prawym przyciskiem myszy w polach tekstowych w systemie Windows przy użyciu C#?
- 20. Wyświetlanie zawartości katalogu przy użyciu C i Windows
- 21. Jak mogę skopiować i wkleić plik w systemie Windows przy użyciu C++?
- 22. Jak uzyskać ścieżkę danych aplikacji w systemie Windows przy użyciu C++?
- 23. Jakikolwiek sposób, aby wyłączyć "internet off" w systemie Windows przy użyciu C#?
- 24. Jak sprawdzić, czy proces ma podwyższone uprawnienia w systemie Windows 7 przy użyciu natywnego C++?
- 25. Catch CTRL-C w systemie Windows przy użyciu Git Bash/MINGW64 z Go
- 26. Tworzenie pliku w systemie Linux przy użyciu C
- 27. Zmiana bieżącego katalogu w systemie Linux przy użyciu C++
- 28. Otwieranie pliku w systemie Unix przy użyciu C++
- 29. Trilateracja w systemie Android przy użyciu iBeaconów
- 30. Konfigurowanie watka pliku LESS w PHPStorm 6 przy użyciu pliku node.js w systemie Windows?
jest jakiś sposób, aby wiedzieć, czy program antywirusowy jest aktualizowany w systemie w systemie Windows [email protected] ng.47 – TechBrkTru
Możesz użyć WMI; zobacz [tutaj] (http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/bd97d9e6-75c1-4f58-9573-9009df5de19b). – SLaks