Gibt es eine Möglichkeit zu erkennen, ob eine Antivirus-Software in einem Computer mit C# installiert ist? Ich weiß, dass das Sicherheitscenter eine Antivirensoftware erkennt, aber wie erkennt man das in C#?Erkennen Sie Antivirus unter Windows mit C#
Antwort
Laut Microsoft verwendet das Windows-Sicherheitscenter einen zweistufigen Ansatz für den Erkennungsstatus. Eine Ebene ist manuell und die andere Ebene ist automatisch über Windows Management Instrumentation (WMI). Im manuellen Erkennungsmodus sucht das Windows-Sicherheitscenter nach Registrierungsschlüsseln und Dateien, die von unabhängigen Softwareherstellern an Microsoft bereitgestellt werden. Mithilfe dieser Registrierungsschlüssel und -dateien kann das Windows-Sicherheitscenter den Status von unabhängiger Software erkennen. Im WMI-Modus ermitteln Softwarehersteller ihren eigenen Produktstatus und melden diesen Status über einen WMI-Anbieter an das Windows-Sicherheitscenter zurück. In beiden Modi versucht das Windows-Sicherheitscenter festzustellen, ob das Folgende zutrifft:
Ein Antivirenprogramm ist vorhanden.
Die Antivirus-Signaturen sind auf dem neuesten Stand.
Echtzeit-Scans oder On-Access-Scans sind für Antivirus-Programme aktiviert.
Bei Firewalls erkennt Windows Security Center, ob eine Firewall eines Drittanbieters installiert ist und ob die Firewall aktiviert ist oder nicht.
Also, um das Vorhandensein einer Antivirus-Software, um zu bestimmen, können Sie die WMI Herstellen einer Verbindung zu dem root\SecurityCenter
Namespace (beginnend mit Windows Vista müssen Sie den root\SecurityCenter2
Namespace), und dann für die AntiVirusProduct
WMI-Klasse abfragen.
Schauen Sie sich das Beispielcode
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();
}
}
}
Die WMI-Abfrage etwas in Vista SP2 ändert und darüber hinaus.
versuchen, diesen Teil \ root \ SecurityCenter2 statt \ Security von \ root
Die Ergebnisse auch leicht unterschiedlich sind. Sie können zwar weiterhin den Anzeigenamen abrufen, müssen jedoch eine Bitmaskierung für das ProductState-Feld durchführen, um festzustellen, ob der onAccessScanner aktiviert ist, und die Art von upToDate-Informationen.
Öffnen Sie C:\Windows\System32\wbem\wscenter.mof
von Notepad. Es hilft Ihnen, die Namespaces und Klassen existieren:
C# Abfrage:
// 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. Erkennen des Antivirus-Status
- 2. Erkennen von Prozessen mit Audio unter Windows
- 3. erkennen Programmabbruch (C, Windows)
- 4. Erkennen von externen Geräten Einfügung unter Windows
- 5. Erkennen von mehreren verknüpften C-Laufzeit unter Windows
- 6. Antivirus-Konflikt mit Programm
- 7. So erkennen Sie die USB-Geschwindigkeit unter Windows
- 8. Windows Server 2008 Antivirus-Software mit einer API
- 9. Qt kann Drucker unter Windows nicht erkennen
- 10. Drittanbieter-Antivirus-Name Fetch
- 11. Symbian Programmierung unter Windows mit C++ - Anleitung
- 12. Dim Bildschirm unter Windows mit C++
- 13. Erkennen eines VGA-Monitors unter Windows mit DDC?
- 14. Sperren von Dateien mit C++ unter Windows
- 15. Antivirus aktivieren und deaktivieren
- 16. Beschleunigen Redis unter Windows/C#
- 17. Log auf Ereignisanzeige unter Windows mit C++
- 18. PrintTestPage mit C# unter Windows Vista
- 19. Dienste unter Windows mit Visual C++ 6.0
- 20. Video-Overlay unter Windows (mit C#?)
- 21. C/C++/Assembly Programmatisch erkennen, ob Hyper-Threading unter Windows, Mac und Linux aktiv ist
- 22. Installieren Sie Protokollpuffer unter Windows
- 23. Wie erkennen Sie ausstehende Systemabschaltung unter Linux?
- 24. Speicherleckerkennung unter Windows für GNU C/C++
- 25. Threadstapelgröße unter Windows (Visual C++)
- 26. "Zuhören" Dateiänderungen in C/C++ (unter Windows)
- 27. Prozess Selbstverteidigung wie Antivirus
- 28. So erkennen Sie die an den Drucker gesendete Seite in Windows Windows Mit C#
- 29. So erkennen Sie, wenn Windows inaktiv ist
- 30. Parallele API für C/C++ unter Windows
ist es eine Möglichkeit zu wissen, ob Das Antivirenprogramm wird auf dem System unter Windows [email protected] aktualisiert ng.47 – TechBrkTru
Sie können WMI verwenden; siehe [hier] (http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/bd97d9e6-75c1-4f58-9573-9009df5de19b). – SLaks