To reply to myself. I've missed the fact that if the requested format is the same as Wine's internal format it will be a simple memcpy. I did not want to penalize most dinput applications that just use default keyboard format (array of 256 bytes).
What do you think about using common buffer for all types of devices and translating a new event direct to user's data format? In this case we just copy buffer of base device.