Block/disable XInput devices (HIDGuardian)



  • Hello!

    I've been looking into all the ViGEm projects and hacking into VDX a bit these past few days. It's super cool and it has been a lot of fun.

    However, I've ran into a problem: I need to disable XInput devices that aren't the virtual gamepad to avoid duplicate inputs (one of them is the feeder gamepad, but ideally I'd like to disable just about every other input device, if possible). From what I've read, this is exactly what HIDGuardian was supposed to do, but apparently it has been discontinued. ¿Is a newer version of HIDGuardian in development right now? If so, ¿Is there any way I could have a look into it?

    Also, side question that I don't know where to ask but I guess you guys should know about. ¿Is there any way to reorder XInput devices without physically unplugging them? (that is, swapping player 1 and 2 controllers, for example). From what I've seen, no such thing exists, but a man can dream...

    Thanks!



  • Hi! 😃

    @smitty_werben said in Block/disable XInput devices (HIDGuardian):

    From what I've read, this is exactly what HIDGuardian was supposed to do, but apparently it has been discontinued. ¿Is a newer version of HIDGuardian in development right now? If so, ¿Is there any way I could have a look into it?

    Well, status "it's complicated" 😅 ever since I've learned more on what's involved to come up with a solution like HG I also stumbled upon its limitations. Yes, there are even multiple "never" versions made, mostly redesigned and rewrites coming along with my experiments. Nothing that stable though that I'd have it production-signed and released.

    As for blocking/hiding XUSB/XInput/XGIP/X360/XBONE devices: it is possible but it's complicated and annoying. I basically know how it's done but you'd need one or more drivers occupying multiple "locations" on the system so to say and in general that's currently simply too big a project for me to just follow that route for fun.

    @smitty_werben said in Block/disable XInput devices (HIDGuardian):

    Also, side question that I don't know where to ask but I guess you guys should know about. ¿Is there any way to reorder XInput devices without physically unplugging them? (that is, swapping player 1 and 2 controllers, for example). From what I've seen, no such thing exists, but a man can dream...

    That's possible in multiple ways, although I'd consider them all "hacky". The non-driver route would be hooking the XInput APIs and swapping the dwUserIndex via that way but almost all anti-cheat protected titles will most probably sh*t themselves when you attempt that since the majority of game "hacks" (cheats) use the same techniques so that's not really production-ready in my opinion. Same with a proxy DLL, I guess it comes down to trial and error since ofc. all anti-cheat manufacturers will keep their "algorithms" of what's allowed and what not a well protected secret for obvious reasons.

    Hope, that could give you some insights.

    Cheers



  • I guess another approach you could take is what I do with XBOFS.win which is to replace the normal driver with a WinUSB driver and then write a feeder which communicates with your input device via WinUSB and dispatch to VigEm.

    It's pretty laser-pointer specific but of course it does mean you need to write all the code to interact with your feeder controller.

    It's a decent solution for a tool like mine which supports two specific controllers which both talk the same language (XBox GIP) but not sure if it work would so well for you...



  • @nefarius said in Block/disable XInput devices (HIDGuardian):

    As for blocking/hiding XUSB/XInput/XGIP/X360/XBONE devices: it is possible but it's complicated and annoying. I basically know how it's done but you'd need one or more drivers occupying multiple "locations" on the system so to say and in general that's currently simply too big a project for me to just follow that route for fun.

    So basically there's no good way of removing the feeder gamepad/avoiding duplicate inputs? Bummer. I'll take a look at your HideDS4, then (Would you say this is the best way of trying to work around this problem?)

    That's possible in multiple ways, although I'd consider them all "hacky". The non-driver route would be hooking the XInput APIs and swapping the dwUserIndex via that way but almost all anti-cheat protected titles will most probably sh*t themselves when you attempt that since the majority of game "hacks" (cheats) use the same techniques so that's not really production-ready in my opinion. Same with a proxy DLL, I guess it comes down to trial and error since ofc. all anti-cheat manufacturers will keep their "algorithms" of what's allowed and what not a well protected secret for obvious reasons.

    So there's no way to do it system-wise, so to speak, and I have to trick the game into reordering the devices. It's not ideal but that sounds interesting, actually. I'll look into how this works.

    @OOPMan said in Block/disable XInput devices (HIDGuardian):

    I guess another approach you could take is what I do with XBOFS.win which is to replace the normal driver with a WinUSB driver and then write a feeder which communicates with your input device via WinUSB and dispatch to VigEm.

    It's pretty laser-pointer specific but of course it does mean you need to write all the code to interact with your feeder controller.

    It's a decent solution for a tool like mine which supports two specific controllers which both talk the same language (XBox GIP) but not sure if it work would so well for you...

    I just read the whole post you made about how XBOFS came to be. It's super cool. Also super infuriating that an XB1 controller doesn't have proper support in Microsoft's own OS 😂

    My case is way simpler and dumber than yours and replacing the driver seems kind of overkill; I just hacked a quick SOCD cleaner into VDX (the controller I want to clean uses uses normal X360 drivers) and, although it works, both the cleaned controller and the real controller are being received in parallell which ends up, well, not cleaning the input at all lol.


Log in to reply