Skip to content
This repository has been archived by the owner on Jul 27, 2023. It is now read-only.
/ HidGuardian Public archive

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

License

Notifications You must be signed in to change notification settings

nefarius/HidGuardian

Repository files navigation

Devil

HidGuardian

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


This was a research project and an attempt of turning the proof of concept project HideDS4 into a Windows kernel-mode filter driver that allows system-wide hiding of joysticks and gamepads, addressing doubled-input issues in games running with remapping utilities. It has been discontinued in favour of better solutions. The code will stay up for anyone to use as either an inspiration or a negative example 😜 Do bear in mind, that the code may contain unaddressed issues! Compile and use at your own risk! No support or binaries provided!


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 HidCerberus it morphs into a powerful device firewall toolkit allowing for fine-grained access restrictions to input devices.

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.