[PATCH 1/3] RawInput: Uppercase the device names up to the GUID.

Rémi Bernon rbernon at codeweavers.com
Wed Feb 24 05:54:42 CST 2021


On 2/24/21 9:50 AM, Arkadiusz Hiler wrote:
> On Wed, Feb 24, 2021 at 08:55:07AM +0100, Rémi Bernon wrote:
>> On 2/22/21 12:50 PM, Arkadiusz Hiler wrote:
>>> This is a preparation for a patch that changes setupapi to return lowercased
>>> device paths, which is the source of RawInput device names. On Windows
>>> RawInput returns mostly uppercase names (except the GUID part) and we want to
>>> keep Wine's old behavior in this regards as SDL 2.0.14+ looks for uppercase IG_
>>> to match xinput devices to their RawInput counterparts.
>>>
>>> Signed-off-by: Arkadiusz Hiler <ahiler at codeweavers.com>
>>> ---
>>>    dlls/user32/rawinput.c | 5 ++++-
>>>    1 file changed, 4 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/dlls/user32/rawinput.c b/dlls/user32/rawinput.c
>>> index ba11a121bc5..13aac0278d5 100644
>>> --- a/dlls/user32/rawinput.c
>>> +++ b/dlls/user32/rawinput.c
>>> @@ -94,7 +94,7 @@ static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface)
>>>        SP_DEVICE_INTERFACE_DETAIL_DATA_W *detail;
>>>        struct device *device;
>>>        HANDLE file;
>>> -    WCHAR *path;
>>> +    WCHAR *path, *pos;
>>>        DWORD size;
>>>        SetupDiGetDeviceInterfaceDetailW(set, iface, NULL, 0, &size, NULL);
>>> @@ -121,6 +121,9 @@ static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface)
>>>        }
>>>        heap_free(detail);
>>> +    /* upper case everything but the GUID */
>>> +    for (pos = path; *pos && *pos != '{'; pos++) *pos = towupper(*pos);
>>> +
>>>        file = CreateFileW(path, GENERIC_READ | GENERIC_WRITE,
>>>                FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
>>>        if (file == INVALID_HANDLE_VALUE)
>>>
>>
>> Hi Arek!
>>
>> I'd think a test to validate this could be nice. I know we don't have any
>> gamepad device available on the test bot, but maybe it's still possible to
>> validate at least with with mouse / keyboard devices? It would also let us
>> check the test manually on a real Windows with a gamepad plugged in.
> 
> Hey,
> 
> Thanks for the feedback.
> 
> Looking at this a bit closer there seems to be more going on with the
> paths on Windows:
> 
> rawinput:    \\?\HID#VID_054C&PID_0CE6&MI_03#7&207751a1&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
> setupapi:    \\?\hid#vid_054c&pid_0ce6&mi_03#7&207751a1&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
> instance_id:     HID\VID_054C&PID_0CE6&MI_03\7&207751A1&0&0000
> 
> or
> 
> rawinput:    \\?\HID#VID_046D&PID_C52B&MI_02&Col01#7&25fe7032&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
> setupapi:    \\?\hid#vid_046d&pid_c52b&mi_01&col01#7&392e8c70&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
> instance_id:     HID\VID_046D&PID_C52B&MI_01&COL01\7&392E8C70&0&0000
> 
> It's not even uppercasing up to second '#'. It looks like there's
> another source of path/instance_id that is case sensitive (Col01 vs
> COL01). So having a test that checks if everything is uppercase would
> fail on Windows.
> 
> I would treat the patch in current form more as "keeping the old
> behavior that we know some software depends on[0]" instead of "fixing
> this once and for all".
> 
> [0]: https://github.com/libsdl-org/SDL/blob/fadfa5/src/joystick/windows/SDL_rawinputjoystick.c#L696
> 

Alright, then maybe not checking the whole string but at least a test 
reflecting the SDL assumption, with a comment pointing to it?
-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list