[PATCH] winebus.sys: Allow XBOX Masquerade to be turned off
Aric Stewart
aric at codeweavers.com
Mon Nov 19 10:50:13 CST 2018
Signed-off-by: Aric Stewart <aric at codeweavers.com>
On 11/16/18 11:08 PM, Brendan McGrath wrote:
> Elite Dangerous appears to iterate input devices via
> DInput and will only defer to XInput if there is a
> HID device with a matching VID and PID.
>
> The current behaviour of the SDLBUS is to masquerade
> any controller as an XBOX controller. This causes
> Elite Dangerous to treat any other type of contoller
> as a Joystick.
>
> This patch allows this masquerading behaviour to be
> switched off via a REG_BINARY registry entry:
> HKCU\Software\Wine\XInput\MasqueradeXBOXController
>
> 0 - Turns it off (so it uses the real VID and PID
> 1 - Turns it on (so it uses the XBOX controller VID and PID)
>
> The default behaviour is to leave it as is (i.e on).
>
> Signed-off-by: Brendan McGrath <brendan at redmandi.com>
> ---
> dlls/winebus.sys/Makefile.in | 2 +-
> dlls/winebus.sys/bus_sdl.c | 19 ++++++++++++++++++-
> 2 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/dlls/winebus.sys/Makefile.in b/dlls/winebus.sys/Makefile.in
> index d3421b49f1a..76cd9e28c39 100644
> --- a/dlls/winebus.sys/Makefile.in
> +++ b/dlls/winebus.sys/Makefile.in
> @@ -1,5 +1,5 @@
> MODULE = winebus.sys
> -IMPORTS = ntoskrnl setupapi
> +IMPORTS = ntoskrnl setupapi advapi32
> EXTRALIBS = $(IOKIT_LIBS) $(UDEV_LIBS)
> EXTRAINCL = $(UDEV_CFLAGS) $(SDL2_CFLAGS)
> EXTRADLLFLAGS = -Wb,--subsystem,native
> diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
> index 6b2b28e8c90..22b63bad09b 100644
> --- a/dlls/winebus.sys/bus_sdl.c
> +++ b/dlls/winebus.sys/bus_sdl.c
> @@ -39,6 +39,7 @@
> #include "winbase.h"
> #include "winnls.h"
> #include "winternl.h"
> +#include "winreg.h"
> #include "ddk/wdm.h"
> #include "ddk/hidtypes.h"
> #include "wine/library.h"
> @@ -795,6 +796,22 @@ static void try_remove_device(SDL_JoystickID index)
> bus_remove_hid_device(device);
> }
>
> +static BOOL masquerade_xbox_controller(void)
> +{
> + HKEY hkey;
> + BOOL ret = TRUE;
> +
> + /* @@ Wine registry key: HKCU\Software\Wine\XInput */
> + if (RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\XInput", &hkey) == ERROR_SUCCESS)
> + {
> + DWORD data_size = sizeof(ret);
> + RegQueryValueExA(hkey, "MasqueradeXBOXController", NULL, NULL, (LPBYTE) &ret, &data_size);
> + }
> +
> + TRACE("MasqueradeXBOXController = %d\n", ret);
> + return ret;
> +}
> +
> static void try_add_device(SDL_JoystickID index)
> {
> DWORD vid = 0, pid = 0, version = 0;
> @@ -818,7 +835,7 @@ static void try_add_device(SDL_JoystickID index)
> controller = pSDL_GameControllerOpen(index);
>
> id = pSDL_JoystickInstanceID(joystick);
> - if (controller)
> + if (controller && masquerade_xbox_controller())
> {
> vid = VID_MICROSOFT;
> pid = PID_XBOX_CONTROLLERS[3];
>
More information about the wine-devel
mailing list