You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.3 KiB

  1. #nullable enable
  2. using IPA.Config;
  3. using IPA.Logging;
  4. using System;
  5. namespace IPA.AntiMalware
  6. {
  7. /// <summary>
  8. /// Provides a way to access BSIPA's Anti-Malware engine.
  9. /// </summary>
  10. /// <see cref="Engine"/>
  11. /// <see cref="IAntiMalware"/>
  12. public static class AntiMalwareEngine
  13. {
  14. private static IAntiMalware? engine;
  15. /// <summary>
  16. /// Gets the current Anti-Malware engine.
  17. /// </summary>
  18. public static IAntiMalware Engine => engine ?? throw new InvalidOperationException();
  19. internal static bool IsInitialized => engine != null;
  20. internal static void Initialize()
  21. {
  22. engine = CreateEngine();
  23. }
  24. private static IAntiMalware CreateEngine()
  25. {
  26. IAntiMalware? engine = null;
  27. if (SelfConfig.AntiMalware_.UseIfAvailable_)
  28. {
  29. #if !NET35
  30. engine = WindowsCOMAntiMalware.TryInitialize();
  31. #endif
  32. engine ??= WindowsWin32AntiMalware.TryInitialize();
  33. }
  34. engine ??= new NoopAntiMalware();
  35. Logger.AntiMalware.Debug($"Antimalware engine initialized with {engine.GetType()}");
  36. return engine;
  37. }
  38. }
  39. }