Class WmiQueryHandlerFFM
java.lang.Object
oshi.util.platform.windows.WmiQueryHandlerFFM
FFM-based utility to handle WMI Queries. Designed to mirror the JNA
WmiQueryHandler API.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceFunctional interface for processing WMI rows with three parameters. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic WmiQueryHandlerFFMFactory method to create an instance of this class.intReturns the current threading model for COM initialization.intGets the current WMI timeout.protected voidhandleComException(WbemcliUtilFFM.WmiQuery<?> query, FfmComException ex) COM Exception handler.booleaninitCOM()Initializes COM library and sets security to impersonate the local user.protected booleaninitCOM(int coInitThreading) Initializes COM with a specific threading model.booleanSecurity only needs to be initialized once.<T> List<T> queryWMI(String namespace, String wmiClassName, String whereClause, Supplier<T> resultFactory, WmiQueryHandlerFFM.TriConsumer<MemorySegment, Arena, T> rowProcessor) Executes a WMI query, processing each result row with a custom processor.<T> List<T> queryWMI(String wmiClassName, String whereClause, Supplier<T> resultFactory, WmiQueryHandlerFFM.TriConsumer<MemorySegment, Arena, T> rowProcessor) Executes a WMI query in the default namespace, processing each result row with a custom processor.<T extends Enum<T>>
WbemcliUtilFFM.WmiResult<T> queryWMI(WbemcliUtilFFM.WmiQuery<T> query) Query WMI for values.<T extends Enum<T>>
WbemcliUtilFFM.WmiResult<T> queryWMI(WbemcliUtilFFM.WmiQuery<T> query, boolean initCom) Query WMI for values.static voidsetInstanceClass(Class<? extends WmiQueryHandlerFFM> instanceClass) Define a subclass to be instantiated bycreateInstance().voidsetWmiTimeout(int wmiTimeout) Sets the WMI timeout.intSwitches the current threading model for COM initialization.intswitchComThreadingFrom(int expected) Switches the current threading model only if it still matches the expected value.voidUnInitializes COM library.
-
Constructor Details
-
WmiQueryHandlerFFM
protected WmiQueryHandlerFFM()
-
-
Method Details
-
createInstance
Factory method to create an instance of this class. To override this class, usesetInstanceClass(Class)to define a subclass which extendsWmiQueryHandlerFFM.- Returns:
- An instance of this class or a class defined by
setInstanceClass(Class)
-
setInstanceClass
Define a subclass to be instantiated bycreateInstance(). The class must extendWmiQueryHandlerFFM.- Parameters:
instanceClass- The class to instantiate withcreateInstance().
-
queryWMI
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>> WbemcliUtilFFM.WmiResult<T> queryWMI(WbemcliUtilFFM.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 propertiesinitCom- Whether to initialize COM. Iftrue, initializes COM before the query and uninitializes after. Iffalse, assumes the caller has already calledinitCOM()and will callunInitCOM()when done. This can improve WMI query performance.- Returns:
- a WmiResult object containing the query results, wrapping an EnumMap
-
queryWMI
public <T> List<T> queryWMI(String wmiClassName, String whereClause, Supplier<T> resultFactory, WmiQueryHandlerFFM.TriConsumer<MemorySegment, Arena, T> rowProcessor) Executes a WMI query in the default namespace, processing each result row with a custom processor.- Type Parameters:
T- the type of result object- Parameters:
wmiClassName- the WMI class namewhereClause- optional WHERE clause (null for none)resultFactory- factory to create result objects per rowrowProcessor- processor to populate result object from WMI row- Returns:
- list of result objects, empty list if query fails
-
queryWMI
public <T> List<T> queryWMI(String namespace, String wmiClassName, String whereClause, Supplier<T> resultFactory, WmiQueryHandlerFFM.TriConsumer<MemorySegment, Arena, T> rowProcessor) Executes a WMI query, processing each result row with a custom processor.- Type Parameters:
T- the type of result object- Parameters:
namespace- the WMI namespacewmiClassName- the WMI class namewhereClause- optional WHERE clause (null for none)resultFactory- factory to create result objects per rowrowProcessor- processor to populate result object from WMI row- Returns:
- list of result objects, empty list if query fails
-
handleComException
COM Exception handler. Logs at debug level for known-optional classes, otherwise warns.- Parameters:
query- a WmiQuery objectex- a FfmComException 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. -
getComThreading
public int getComThreading()Returns the current threading model for COM initialization.- Returns:
- The current threading model
-
switchComThreading
public int switchComThreading()Switches the current threading model for COM initialization.- Returns:
- The new threading model after switching
-
switchComThreadingFrom
public int switchComThreadingFrom(int expected) Switches the current threading model only if it still matches the expected value.- Parameters:
expected- the threading model observed before the failed initCOM attempt- Returns:
- the new threading model if switched, or the current value if already switched by another thread
-
isSecurityInitialized
public boolean isSecurityInitialized()Security only needs to be initialized once.- Returns:
- Returns the securityInitialized.
-
getWmiTimeout
public int getWmiTimeout()Gets the current WMI timeout.- Returns:
- Returns the current value of wmiTimeout.
-
setWmiTimeout
public void setWmiTimeout(int wmiTimeout) Sets the WMI timeout.- Parameters:
wmiTimeout- The wmiTimeout to set, in milliseconds. To disable timeouts, set timeout as -1 (infinite).
-