Blocks various input devices from being accessed by user-mode applications.
🔥 This project is currently unmaintained due to resource scarcity, no support or new features are to be expected! 🔥
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.
Meet 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.
The driver is built for Windows 7/8/8.1/10 (x86 and amd64).
- Visual Studio 2017 (Community Edition is just fine)
- WDK for Windows 10, version 1803
- .NET Core SDK 2.1 (or greater, required for building only)
You can either build directly within Visual Studio or in PowerShell by running the build script:
.\build.ps1
Do bear in mind that you'll need to sign the driver to use it without test mode.
Found a bug and want it fixed? Open a detailed issue on the GitHub issue tracker!
Have an idea for a new feature? Let's have a chat about your request on Discord or the community forums.
Please respect that the GitHub issue tracker isn't a helpdesk. We offer a Discord server and forums, where you're welcome to check out and engage in discussions!