• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 460
  • Last Modified:

Using a variable filter in WQUERY for WMI

How can you create in C++ a WQL that allows you to use a variable instead of a fixed expression as the filter in WMI
0
cotosl
Asked:
cotosl
  • 4
  • 4
1 Solution
 
DanRollinsCommented:
I don't undertand the question:  With WMI, one uses a scripting language to, for instance, execute a SQL SELECT statement.  The statement that you pass may include string literals as well as text held in variables.  
Perhaps if you provide some more details about what you are trying to acccomplish, the question will be clarified.
0
 
cotoslAuthor Commented:
DanRollins:

Attached is an example of an ExecQuery(). What I want to know is how you can do an ExecQuery for WMI with a filter variable for the "Where" instead of the fixed 'anExecutableName.exe'. The idea is to be able to receive a list of processes and then use the ExecQuery() to return the process information for only the processes in the list.
hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_Process Where Name = 'anExecutableName.exe'"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);

Open in new window

0
 
DanRollinsCommented:
You could skip the WHERE clause and just use the enumerator to examine each process.  There is an example here:
   Example: Getting WMI Data from the Local Computer
   http://msdn.microsoft.com/en-us/library/aa390423.aspx
(though it uses the Win32_OperatingSystem table, the process is similar)
You can focus the result set by using inequality operators in the SQL query syntax, such as:
    ...WHERE Name < 'S"
http://msdn.microsoft.com/en-us/library/aa394054(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa394605(VS.85).aspx
Perhaps the operator you really want is the LIKE operator which allows you to match character patterns.  For instance:

    ...WHERE Name LIKE "%ABC%"
Which will return process that contain th letters ABC anywhere in the name.  See
   LIKE Operator
   http://msdn.microsoft.com/en-us/library/aa392263(VS.85).aspx
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
cotoslAuthor Commented:
The solutions proposed are valid but from them the one closer to what I was looking for is the one using the iterator. What I dont like about it is going over all results when they can be filtered from the very begining. Maybe the question should be how to construct the query using a variable outside of _bstr_t()and then plug it in the _bstr-t().
0
 
DanRollinsCommented:
It is possible to build the SELECT statement by concatening strings. For instance:
CString sStmt;
sStmt="SELECT * FROM Win32_Process Where Name LIKE '%";
sStmt += sVarToMatch; // eg, ABC or .EXE
sStmt += "%' ";
hres = pSvc->ExecQuery( bstr_t("WQL"),
bstr_t( sStmt ),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL, &pEnumerator
);
If that does not help you, then please provide some examples of what variables you would like to plug into the SELECT statement, and I'll show you how to do it.
0
 
cotoslAuthor Commented:
One thing I noticed was that if you try to initialize the variable when you define it the compile fails. But if you define it and then you set its value it will work (see code).  Do you have any idea why this happen.



// This will generate an error
CString sVarToMatch = "ABC" 
 
// This will work fine
CString sVarToMatch;
aVarToMatch = "ABC";

Open in new window

0
 
DanRollinsCommented:
It's a quirk of the C++ programming language that each statement must be terminated with a semicolon (;).
0
 
cotoslAuthor Commented:
Sorry for the mistake. The error with the semicolon was only on the message. The actual code does have the semicolon and you get the error.
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now