The goal is to use the device object API as the backend for Windows.Devices.Enumeration, as most concepts from the latter have a one-to-one mapping to the former:
* The device object API is centred around the `DEV_OBJECT` type, which provides a unified representation for devnodes, device interfaces/containers, device interface classes, and association endpoints (networking protocols and service, like UPnP and Bluetooth), together with the properties associated with it. The [`DevObjectType`](https://learn.microsoft.com/en-us/windows/win32/api/devquerydef/ne-devquerydef-dev_object_type) enum maps to [`Windows.Devices.Enumeration.DeviceInformationKind`](https://learn.microsoft.com/en-us/uwp/api/windows.devices.enumeration.deviceinformationkind?view=winrt-26100). This would be used to implement the `IDeviceInformation` interface.
* `DEVPROP_FILTER_EXPRESSION` allows filtering device queries by their properties. AQS filter strings would be parsed into an array of filters, which are then passed to the query object methods.
* `DevCreateObjectQuery` would be the backend for `DeviceWatcher`, as it provides asynchronous callbacks for initial device enumeration, device addition, removal and updates.
* `DevGetObjects` would be used to implement the `FindAllAsync*` methods.
This MR adds a basic implementation and tests for `DevGetObjects`.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8438
Use SetupDiGetDeviceInterfacePropertyW to retrieve interface property values.
--
v2: cfgmgr32/test: Add additional tests for CM_Get_Device_Interface_PropertyW.
cfgmgr32: Implement CM_Get_Device_Interface_PropertyW for all property keys.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8434