Поделиться через


Querying for Group Policy WMI Objects

After you retrieve an IWbemServices interface pointer, you can call the IWbemServices::ExecQuery method to search for objects of a particular class.

The following code example searches for all objects of the RSOP_RegistryPolicySetting class. RSOP_RegistryPolicySetting is a generic class that represents a registry key and a value, and the associated data. The sample retrieves the key name and value name for each object and prints the values to the console window.

    //
    // Allocate BSTRs for the WMI query language and for the query itself.
    //
    pLanguage = SysAllocString (TEXT("WQL"));
    pQuery = SysAllocString (TEXT("SELECT * FROM RSOP_RegistryPolicySetting"));
    //
    // Allocate BSTRs for the property names to retrieve.
    //
    pRegistryKey = SysAllocString (TEXT("registryKey"));
    pValueName = SysAllocString (TEXT("valueName"));
    //
    // Verify that the allocations succeeded.
    //
    if (pLanguage && pQuery && pRegistryKey && pValueName)
    {
        //
        // Execute the query.
        //
        hr = pIWbemServices->ExecQuery (pLanguage, pQuery, WBEM_FLAG_FORWARD_ONLY | 
                                WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnum);

        if (SUCCEEDED(hr))
        {
            //
            // Loop through the results; 
            //   retrieve the registry key and value names.
            //
            while (pEnum->Next(WBEM_INFINITE, 1, pObjects, &ulRet) == WBEM_S_NO_ERROR)
            {
                hr = pObjects[0]->Get (pRegistryKey, 0, &varRegistryKey, NULL, NULL);

                if (SUCCEEDED(hr))
                {
                    hr = pObjects[0]->Get (pValueName, 0, &varValueName, NULL, NULL);

                    if (SUCCEEDED(hr))
                    {
                        //
                        // Print the key and value names.
                        //
                        wprintf (L" %s\\%s\n", varRegistryKey.bstrVal, varValueName.bstrVal);
                        VariantClear (&varValueName);
                    }

                    VariantClear (&varRegistryKey);
                }

                ulCount++;
            }

            if (ulCount == 0)
            {
                wprintf (L"\tNo registry objects found\n");
            }

            pEnum->Release();
        }
    }

For more information about MMC, see the Microsoft Management Console.