Rémi Bernon (@rbernon) commented about dlls/dinput/joystick_hid.c:
impl->base.read_event = CreateEventW( NULL, TRUE, FALSE, NULL );
if (memcmp( device_path_guid.Data4, guid->Data4, sizeof(device_path_guid.Data4) )) + { + /* Let hid_joystick_device_open() populate joystick devices before checking for default joystick GUID. */ hr = hid_joystick_device_open( -1, guid, &impl->base.instance, impl->device_path, &impl->device, &impl->preparsed, &attrs, &impl->caps, dinput->dwVersion ); + if (hr == DIERR_DEVICENOTREG && IsEqualGUID( guid, &GUID_Joystick ) + && get_default_joystick_device_path( impl->device_path )) + hr = hid_joystick_device_try_open( impl->device_path, &impl->device, &impl->preparsed, &attrs, + &impl->caps, &impl->base.instance, dinput->dwVersion );
Support for GUID_Joystick could simply be about opening the first device at any point in time. Keeping a cached path as the default device to use, with no way to invalidate it after it's been set, doesn't seem very appealing either. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/6878#note_89141