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(a)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
>