/HidGuardian

Windows kernel-mode driver for controlling access to various input devices.

Primary LanguageCGNU General Public License v3.0GPL-3.0

Devil

HidGuardian

Blocks various input devices from being accessed by user-mode applications.

Build status Discord Website PayPal Donate Support on Patreon GitHub followers Twitter Follow

Disclaimer

🔥 ATTENTION: this project is currently incubating at git.vigem.org and will be re-released here once finished 🔥

Please consider the master branch unstable until the disclaimer disappears!

The Problem

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.

The Semi-Solution

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

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.

Demo

Outdated, replace with demo video.

Supported Systems

The driver is built for Windows 7/8/8.1/10 (x86 and amd64).

How to build

Prerequisites

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.

Contribute

Bugs & Features

Found a bug and want it fixed? Open a detailed issue on the GitHub issue tracker!

Have an idea for a new feature? Check out the project board, maybe it's already on there! If not, let's have a chat about your request on Discord or the community forums.

Questions & Support

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!