Blocks various input devices from being accessed by user-mode applications.
ATTENTION: this is in no way a finished product, don't use in production!
Please consider the master branch unstable until the disclaimer disappears!
Games and other user-mode applications enumerate Joysticks, Gamepads and similar devices through various well-known APIs (DirectInput, XInput, Raw Input) and continuously read their reported input states. The primary collection of devices available through DirectInput are HID-Class based devices. When emulating virtual devices with ViGEm the system (and subsequently the application) may not be able to distinguish between e.g. a "real" physical HID Gamepad which acts as a "feeder" and the virtual ViGEm device, therefore suffer from side effects like doubled input. Since coming up with a solution for each application available would become quite tedious a more generalized approach was necessary to reliably solve these issues.
A common way for intercepting the Game's communication with the input devices would be hooking the mentioned input APIs within the target process. While a stable and user-friendly implementation for the end-user might be achievable for some processes, targeting the wide variety of Games available on the market is a difficult task. Hooking APIs involves manipulating the target processes memory which also might falsely trigger Anti-Cheat systems and ban innocent users.
The Real Solution
HidGuardian: a Windows kernel-mode driver sitting on top of every input device attached to the system. With its companion user-mode component
HidVigil it morphs into a powerful device firewall toolkit allowing for fine-grained access restrictions to input devices.
Outdated, replace with demo video.