Rémi Bernon (@rbernon) commented about dlls/windows.devices.bluetooth/bluetoothdevice.c:
+ SP_DEVICE_INTERFACE_DATA iface_data = { .cbSize = sizeof( iface_data ) }; + IBluetoothLEDevice *device; + IPropertyValue *val; + BOOL found = FALSE; + HDEVINFO devinfo; + DWORD idx = 0; + UINT64 addr; + HRESULT hr; + + if (!called_async) return STATUS_PENDING; + if (FAILED((hr = IUnknown_QueryInterface( param, &IID_IPropertyValue, (void *)&val )))) + return hr; + hr = IPropertyValue_GetUInt64( val, &addr ); + IPropertyValue_Release( val ); + if (FAILED( hr )) + return hr; This is always only called internally, I think you can assume `IUnknown *param` is a `IPropertyValue *` directly without going through `QueryInterface`.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/10865#note_139540