#nullable enable using IPA.Config; using IPA.Logging; using System; namespace IPA.AntiMalware { /// /// Provides a way to access BSIPA's Anti-Malware engine. /// /// /// public static class AntiMalwareEngine { private static IAntiMalware? engine; /// /// Gets the current Anti-Malware engine. /// public static IAntiMalware Engine => engine ?? throw new InvalidOperationException(); internal static bool IsInitialized => engine != null; internal static void Initialize() { engine = CreateEngine(); } private static IAntiMalware CreateEngine() { IAntiMalware? engine = null; if (SelfConfig.AntiMalware_.UseIfAvailable_) { #if !NET35 engine = WindowsCOMAntiMalware.TryInitialize(); #endif engine ??= WindowsWin32AntiMalware.TryInitialize(); } engine ??= new NoopAntiMalware(); Logger.AntiMalware.Debug($"Antimalware engine initialized with {engine.GetType()}"); return engine; } } }