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.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
     
  • Method Summary

    Modifier and Type
    Method
    Description
    Factory method to create an instance of this class.
    int
    Returns the current threading model for COM initialization, as OSHI is required to match if an external program has COM initialized already.
    int
    Gets the current WMI timeout.
    protected void
    handleComException(com.sun.jna.platform.win32.COM.WbemcliUtil.WmiQuery<?> query, com.sun.jna.platform.win32.COM.COMException ex)
    COM Exception handler.
    boolean
    Initializes COM library and sets security to impersonate the local user
    protected boolean
    initCOM(int coInitThreading)
    Initializes COM with a specific threading model
    boolean
    Security only needs to be initialized once.
    <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.
    <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.
    static void
    setInstanceClass(Class<? extends WmiQueryHandler> instanceClass)
    Define a subclass to be instantiated by createInstance().
    void
    setWmiTimeout(int wmiTimeout)
    Sets the WMI timeout.
    int
    Switches the current threading model for COM initialization, as OSHI is required to match if an external program has COM initialized already.
    void
    UnInitializes COM library.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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).