...
hr = SysKeyboardWImpl_GetObjectInfo( (LPDIRECTINPUTDEVICE8W)iface , &didoi,
ps->diph.dwObj, ps->diph.dwHow );
You mixing unicode and ascii. Also if you are implementing SysKeyboardAImpl_GetProperty you should also implement it's unicode counterpart SysKeyboardWImpl_GetProperty.
Realization of GetProperty for keyboard device for unicode and ascii do not differ at this time.