[4/5] dinput: Added device's owner username set by SetActionMap and the respective GetProperty to retrieve it

Lucas Zawacki lfzawacki at gmail.com
Fri Jul 8 18:26:37 CDT 2011


I realized this patch and the next are wrong and don't work, despite
the tests passing. No need to bother reading them.

2011/7/8 Lucas Fialho Zawacki <lfzawacki at gmail.com>:
> ---
>  dlls/dinput/device.c         |   22 ++++++++++++++++++++++
>  dlls/dinput/device_private.h |    1 +
>  2 files changed, 23 insertions(+), 0 deletions(-)
>
> diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
> index 5d81227..99c854c 100644
> --- a/dlls/dinput/device.c
> +++ b/dlls/dinput/device.c
> @@ -953,6 +953,16 @@ HRESULT WINAPI IDirectInputDevice2WImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface,
>             TRACE("buffersize = %d\n", pd->dwData);
>             break;
>         }
> +        case (DWORD_PTR) DIPROP_USERNAME:
> +        {
> +            LPDIPROPSTRING ps = (LPDIPROPSTRING)pdiph;
> +
> +            if (pdiph->dwSize != sizeof(DIPROPSTRING)) return DIERR_INVALIDPARAM;
> +            if (strlenW(This->owner) == 0) return S_FALSE;
> +
> +            memcpy(ps->wsz, This->owner, strlenW(This->owner)*sizeof(WCHAR));
> +            break;
> +        }
>         case (DWORD_PTR) DIPROP_VIDPID:
>             FIXME("DIPROP_VIDPID not implemented\n");
>             return DIERR_UNSUPPORTED;
> @@ -1459,10 +1469,22 @@ HRESULT WINAPI IDirectInputDevice8WImpl_SetActionMap(LPDIRECTINPUTDEVICE8W iface
>                                                     LPCWSTR lpszUserName,
>                                                     DWORD dwFlags)
>  {
> +    IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8W(iface);
>     DIPROPDWORD dp;
> +    DWORD username_size = MAX_PATH;
> +    WCHAR username[MAX_PATH];
>
>     FIXME("(%p)->(%p,%s,%08x): semi-stub !\n", iface, lpdiaf, debugstr_w(lpszUserName), dwFlags);
>
> +    /* NULL username defaults to the logged user */
> +    if (lpszUserName == NULL)
> +    {
> +        GetUserNameW(username, &username_size);
> +        lpszUserName = username;
> +    }
> +
> +    memcpy(This->owner, lpszUserName, strlenW(lpszUserName)*sizeof(WCHAR));
> +
>     if (lpdiaf->dwBufferSize > 0)
>     {
>         dp.diph.dwSize = sizeof(DIPROPDWORD);
> diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h
> index 503698a..6df8d93 100644
> --- a/dlls/dinput/device_private.h
> +++ b/dlls/dinput/device_private.h
> @@ -81,6 +81,7 @@ struct IDirectInputDeviceImpl
>     /* Action mapping */
>     int                         num_actions; /* number of actions mapped */
>     ActionMap                  *action_map;  /* array of mappings */
> +    WCHAR                       owner[MAX_PATH]; /* username of the device's owner */
>  };
>
>  extern BOOL get_app_key(HKEY*, HKEY*) DECLSPEC_HIDDEN;
> --
> 1.7.0.4
>



More information about the wine-devel mailing list