This time submitting the full implementation to wine-devel and only the first patch to wine-patches.
Changelog of the full implementation: * Rewritten test assertion messages to just state the reason of failure * Improved WM_INPUT posting, so it would be reflected using the GetQueueStatus function * Added proper GetRawInputBuffer implementation, that requires selecting and removing messages from the message queue, but that's how it works * Added releasing of allocated resources for raw input when destroying a process * Fixed DefRawInputProc to return -1 in case of an error instead of an error code. Also improved function's tests * Added tests and made RegisterRawInputDevices atomic, so there would be no changes if one of submitted registrations fails * Added tests to check for the correct GetQueueStatus(QS_RAWINPUT) status * Added tests to check for empty input queue before sending input using GetInputState * Tests of GetRegisteredRawInputDevices and RegisterRawInputDevices need to be paired and have both as a dependency, so split their tests into 4 parts to make smaller blocks of code * Moved raw input server request handlers to the bottom of the source file, like in the other files * Applied aligned formatting for groups of assignment statements * Other minor refactorings
Zipped version - http://dl.dropbox.com/u/6901628/try16.zip
Also I need to note the lack of applications that make extensive use of the raw input API. There are just a few games and they are convenient with just the mouse movement data.