Rémi Bernon (@rbernon) commented about dlls/dinput/joystick_hid.c:
+ *tmp = 0; + instance_id = ++tmp; + if ((tmp = wcsrchr( instance_id, sep )) && *(tmp + 1) == L'{') + *tmp = 0; + else instance_id = NULL; + } + } + + instance->guidInstance = hid_joystick_guid; + if (device_id && *device_id && instance_id && *instance_id) + { + crc32 = RtlComputeCrc32( 0, (const BYTE *)CharUpperW( device_id ), wcslen( device_id ) * sizeof(WCHAR) ); + instance->guidInstance.Data1 = crc32; + crc32 = RtlComputeCrc32( 0, (const BYTE *)CharUpperW( instance_id ), wcslen( instance_id ) * sizeof(WCHAR) ); + instance->guidInstance.Data2 = HIWORD( crc32 ); + instance->guidInstance.Data3 = LOWORD( crc32 ); The same question can apply to the winebus side, but CRC32 doesn't seem like a very good hashing method? Could we use something a bit more robust or does it not matter for some reason? Ideally of course we would do the same hashing as Windows but it's probably tricky to figure it out by trial and error.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/9687#note_124904