Class WmiQueryHandler

java.lang.Object
oshi.util.platform.windows.WmiQueryHandler

@ThreadSafe public class WmiQueryHandler extends Object
Utility to handle WMI Queries. Designed to be extended with user-customized behavior.
  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • globalTimeout

      private static int globalTimeout
    • wmiTimeout

      private int wmiTimeout
    • failedWmiClassNames

      private final Set<String> failedWmiClassNames
    • comThreading

      private int comThreading
    • securityInitialized

      private boolean securityInitialized
    • EMPTY_CLASS_ARRAY

      private static final Class<?>[] EMPTY_CLASS_ARRAY
    • EMPTY_OBJECT_ARRAY

      private static final Object[] EMPTY_OBJECT_ARRAY
    • customClass

      private static Class<? extends WmiQueryHandler> customClass
  • Constructor Details

    • WmiQueryHandler

      protected WmiQueryHandler()
  • Method Details

    • createInstance

      public static WmiQueryHandler createInstance()
      Factory method to create an instance of this class. To override this class, use setInstanceClass(Class) to define a subclass which extends WmiQueryHandler.
      Returns:
      An instance of this class or a class defined by setInstanceClass(Class)
    • setInstanceClass

      public static void setInstanceClass(Class<? extends WmiQueryHandler> instanceClass)
      Define a subclass to be instantiated by createInstance(). The class must extend WmiQueryHandler.
      Parameters:
      instanceClass - The class to instantiate with createInstance().
    • queryWMI

      public <T extends Enum<T>> com.sun.jna.platform.win32.COM.WbemcliUtil.WmiResult<T> queryWMI(com.sun.jna.platform.win32.COM.WbemcliUtil.WmiQuery<T> query)
      Query WMI for values. Makes no assumptions on whether the user has previously initialized COM.
      Type Parameters:
      T - WMI queries use an Enum to identify the fields to query, and use the enum values as keys to retrieve the results.
      Parameters:
      query - A WmiQuery object encapsulating the namespace, class, and properties
      Returns:
      a WmiResult object containing the query results, wrapping an EnumMap
    • queryWMI

      public <T extends Enum<T>> com.sun.jna.platform.win32.COM.WbemcliUtil.WmiResult<T> queryWMI(com.sun.jna.platform.win32.COM.WbemcliUtil.WmiQuery<T> query, boolean initCom)
      Query WMI for values.
      Type Parameters:
      T - WMI queries use an Enum to identify the fields to query, and use the enum values as keys to retrieve the results.
      Parameters:
      query - A WmiQuery object encapsulating the namespace, class, and properties
      initCom - Whether to initialize COM. If true, initializes COM before the query and uninitializes after. If false, assumes the user has initialized COM separately. This can improve WMI query performance.
      Returns:
      a WmiResult object containing the query results, wrapping an EnumMap
    • handleComException

      protected void handleComException(com.sun.jna.platform.win32.COM.WbemcliUtil.WmiQuery<?> query, com.sun.jna.platform.win32.COM.COMException ex)
      COM Exception handler. Logs a warning message.
      Parameters:
      query - a WbemcliUtil.WmiQuery object.
      ex - a COMException object.
    • initCOM

      public boolean initCOM()
      Initializes COM library and sets security to impersonate the local user
      Returns:
      True if COM was initialized and needs to be uninitialized, false otherwise
    • initCOM

      protected boolean initCOM(int coInitThreading)
      Initializes COM with a specific threading model
      Parameters:
      coInitThreading - The threading model
      Returns:
      True if COM was initialized and needs to be uninitialized, false otherwise
    • unInitCOM

      public void unInitCOM()
      UnInitializes COM library. This should be called once for every successful call to initCOM.
    • getComThreading

      public int getComThreading()
      Returns the current threading model for COM initialization, as OSHI is required to match if an external program has COM initialized already.
      Returns:
      The current threading model
    • switchComThreading

      public int switchComThreading()
      Switches the current threading model for COM initialization, as OSHI is required to match if an external program has COM initialized already.
      Returns:
      The new threading model after switching
    • isSecurityInitialized

      public boolean isSecurityInitialized()
      Security only needs to be initialized once. This boolean identifies whether that has happened.
      Returns:
      Returns the securityInitialized.
    • getWmiTimeout

      public int getWmiTimeout()
      Gets the current WMI timeout. WMI queries will fail if they take longer than this number of milliseconds. A value of -1 is infinite (no timeout).
      Returns:
      Returns the current value of wmiTimeout.
    • setWmiTimeout

      public void setWmiTimeout(int wmiTimeout)
      Sets the WMI timeout. WMI queries will fail if they take longer than this number of milliseconds.
      Parameters:
      wmiTimeout - The wmiTimeout to set, in milliseconds. To disable timeouts, set timeout as -1 (infinite).