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