Aprende a obtener el nombre del antivirus activo de tu sistema operativo en su aplicación Windows Forms usando C#.

Cómo identificar (detectar y nombrar) el software antivirus instalado en la PC con C# en WinForms

En los últimos días trabajé en un proyecto de mantenimiento de PC y uno de los requisitos de esta aplicación era básicamente mostrar el nombre del antivirus instalado en la PC si lo hubiera. Sin embargo, a primera vista esto será difícil. Afortunadamente, no es tan difícil como parece porque Windows ya funciona con esta función, por lo que deberá acceder a sus API para recuperar la información (estamos hablando de SecurityCenter). Windows Security Center es una herramienta de informes que está integrada en el sistema operativo, desde el lanzamiento del Service Pack 2 para Windows XP, que monitorea el estado de salud del endpoint en diferentes áreas, como actualizaciones de Windows, configuraciones de firewall y antivirus / anti- configuración de software espía.

En este artículo, le mostraremos cómo recuperar el nombre del antivirus instalado actual accediendo a la clase AntiVirusProduct del centro de seguridad.

1. Agregue una referencia a la clase System.Management

Para obtener información sobre la placa base con C # en WinForms, deberá tener acceso a la clase de Administración del sistema:

using System.Management;

Sin embargo, en algunas versiones de Visual Studio (específicamente en 2010 y posteriores), deberá agregar la referencia ( .DLL) en su proyecto manualmente. Para hacer eso, siga estos pasos:

  1. Haga clic derecho en Proyecto, Agregar referencias 

  2. Seleccione la pestaña Ensamblados (marco) y Buscar System.Management y finalmente agregue la referencia y haga clic en Aceptar. 

Add System.Management reference visual studio manually

Necesitamos agregar  System.Management para crear consultas en  WMI Classes . Lea más sobre la recuperación de clases WMI en .NET en msdn aquí .

2. Recuperar información

Para recuperar la información del Buscador de objetos de administración, consultaremos la clase root\SecurityCenter2root\SecurityCenteren la versión de Windows XP). La AntivirusProductclase que devuelve información sobre el antivirus instalado no está documentada por Microsoft y solo es compatible con las ediciones de Windows Desktops (Windows XP, Windows Vista y Windows 7). También dependiendo de la versión de Windows, las propiedades recuperadas por esta clase pueden cambiar, por ejemplo en Windows XP estas propiedades están disponibles:

Namespace : SecurityCenter

AntiVirusProduct-Properties

companyName
displayName
enableOnAccessUIMd5Hash
enableOnAccessUIParameters
instanceGuid
onAccessScanningEnabled
pathToEnableOnAccessUI
pathToUpdateUI
productUptoDate
updateUIMd5Hash
updateUIParameters
versionNumber

Y en Windows 7 y superior:

Namespace : SecurityCenter2

displayName
instanceGuid
pathToSignedProductExe
pathToSignedReportingExe
productState

En nuestra PC, el código generará la siguiente salida:

public void getAntivirusName()
{
    ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter2", "SELECT * FROM AntiVirusProduct");
    ManagementObjectCollection data = wmiData.Get();

    foreach (ManagementObject virusChecker in data)
    {
        Console.WriteLine(virusChecker["displayName"]);
        Console.WriteLine(virusChecker["instanceGuid"]); 
        Console.WriteLine(virusChecker["pathToSignedProductExe"]); 
        Console.WriteLine(virusChecker["productState"]);
    }
}

En nuestra PC, el código generará la siguiente salida:

Windows Defender
{xxxxxxxx-831F-xxxx-9EE-DA111111146}
windowsdefender://
397568

Tenga en cuenta que la propiedad productState devuelve un número cuya interpretación cambia según el antivirus que tenga, por ejemplo:

A. AVG Internet Security 2012 (del producto antivirus WMI)

262144 (040000) = desactivado y actualizado

266240 (041000) = habilitado y actualizado

B. AVG Internet Security 2012 (del producto firewall WMI)

266256 (041010) = firewall habilitado - (los dos últimos bloques no son relevantes, parece que para el firewall)

262160 (040010) = firewall desactivado - (los dos últimos bloques no son relevantes, parece que para el firewall)

C. Windows Defender

393472 (060100) = desactivado y actualizado

397584 (061110) = habilitado y desactualizado

397568 (061100) = habilitado y actualizado

D. Microsoft Security Essentials

397312 (061000) = habilitado y actualizado

393216 (060000) = desactivado y actualizado

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores