Rémi Bernon (@rbernon) commented about dlls/cfgmgr32/main.c:
obj.ObjectType = type; obj.pszObjectId = detail->DevicePath; if (SUCCEEDED( (hr = dev_object_iface_get_props( &obj, set, &iface, props_len, props, all_props )) ))
What about, instead of having to optionally cache all properties for filtering even when only some were requested, always request all properties here, then hide the undesired ones before the callback? This could be made efficient by keeping undesired properties at the end of the array and changing obj.cPropertyCount.
Related question then, do we have tests that the filter applies to properties that weren't requested?