For a proof-of-concept, I need a mouse filter driver project to inject some proprietary code that translates the input of people with movement disorders. As I could not get the WDK80 Mouse Input WDF Filter Driver (Moufiltr) working, I am looking for a quick help to get me started.
There are a few requirements, but everything is negotiable. I will just list the full list to give as much information as possible.
1) It must be work plug-and-play as many mouse/pointer devices will be injected and ejected in different USB hubs. Please, make sure that other PnP devices do not mess up this driver.
2) It should be possible to apply the driver to all types of mouse/pointer devices (mostly USB). There is a wide variety of devices that will be tested and it should just find the device itself. It is allowed to just take all mouse like input devices (I believe it is called an upper filter class driver ?).
3) It should auto load the driver on all attached devices and attach automatically to all plugged in device. Once in operation, we cannot choose the needed drivers manually (e.g. assigning the inf file to a specific attached device).
4) It would be ideal to combine information of multiple pointing devices as a few techniques in early stage of development can do a better prediction with more inputs. If this is not possible, let me know.
5) There should be a dummy function in which I can use the input (or inputs of multiple pointing devices) to generate the actual input. Just for information, the translated input can be a collection of delayed movements. I was already successful with a non-pnp driver and the combination of the functions assigned to the IRP_MJ_READ and its IoSetCompletionRoutine. Maybe interesting is to add some debug output that prints a message on "dispatching the read request" and "completing the read request" with device ID and relative mouse movement. That way, I know where I can inject my code and where to find the needed input data.
6) (Optionally) It would be nice, if I can enable of disable the translations by an external (in user space) call or setting.