-
Notifications
You must be signed in to change notification settings - Fork 6
Driver Management
PadForge needs one driver (HIDMaestro) and offers two more (HidHide, Windows MIDI Services). HIDMaestro auto-installs on first launch and has no uninstall path. Install or uninstall the optional two from Settings.

| Component | Status | What it does |
|---|---|---|
| HIDMaestro | Required for any virtual controller other than Keyboard+Mouse. Auto-installed on first run. | Creates the virtual HID device that matches each slot's controller shape (Xbox Series, DualSense, Logitech wheel, and so on). 225+ device profiles. |
| OpenXInput | Bundled inside PadForge.exe. No install, no setting. |
Filters PadForge's own virtual controllers out of its own XInput view so SDL3 does not loop them back as physical inputs. |
| Keyboard+Mouse | Built in. No driver. | Maps controller inputs to keyboard and mouse via Win32 SendInput. |
| HidHide | Optional. Install when games show double input. | Hides physical controllers from games so they only see the virtual ones. |
| Windows MIDI Services | Optional. Install only for the MIDI controller type. | Virtual MIDI endpoints for sending notes and CC to DAWs and music software. Needs Windows 11 24H2 (build 26100) or later. |
Coming from PadForge v2? ViGEmBus and vJoy are gone. HIDMaestro replaces both. On first v3 launch, PadForge detects them and offers to remove them through the legacy driver cleanup dialog. There is no v2 to v3 path that keeps either.
The first time the engine starts, it calls HMContext.InstallDriver() to register HIDMaestro through pnputil. PadForge already runs elevated, so no extra UAC prompt fires here. Registration takes a few seconds. No restart. The Settings page's HIDMaestro card flips green and the Xbox, PlayStation, and Extended slot types turn on.
HidHide and Windows MIDI Services do not auto-install. They sit on the Settings page until you click Install.
Each driver card on the Settings page shows a colored dot.
| Dot | Meaning |
|---|---|
| Green "Installed" | Driver ready. Version number under the dot. |
| Red "Not Installed" | Install before the matching slot type works. |
The Dashboard shows the same status as a compact row.
PadForge runs whether or not the optional drivers are installed. Missing drivers only gray out the features that need them.
| Missing | What you lose |
|---|---|
| HIDMaestro | Xbox, PlayStation, and Extended buttons grayed out in Add Controller. Keyboard+Mouse and MIDI (if installed) still work. |
| HidHide | "Hide from games" has no effect. Games may see the physical and the virtual at the same time. |
| MIDI Services | MIDI button grayed out or hidden when Windows is too old. Every other slot type works. |
PadForge always runs elevated. HIDMaestro registration (first-launch only), HidHide install / uninstall, Windows MIDI Services install / uninstall, and HidHide whitelist edits all need administrator. The UAC prompt fires once per launch when PadForge itself starts.
HIDMaestro driver install runs inside PadForge's own elevated process (no extra prompt). HidHide and Windows MIDI Services install/uninstall spawn msiexec (or the bundled installer) with Verb = "runas"; because the parent process is already elevated, Windows passes the elevation through without a second UAC prompt.
One user-mode UMDF2 (User-Mode Driver Framework 2) bus driver that publishes virtual HID controllers from user mode. Each non-MIDI, non-Keyboard+Mouse slot maps to one HIDMaestro device profile. A profile bundles a USB VID/PID, product and OEM strings, a HID report descriptor, and (where applicable) the FFB PID descriptor pages.
- Xbox 360, Xbox One, Xbox Series, Elite, Adaptive
- DualShock 3, DualShock 4, DualSense, DualSense Edge
- Logitech G-series wheels (G29, G920, G923, G27)
- Thrustmaster and Fanatec wheels and pedals
- HOTAS sticks (Thrustmaster Warthog, Logitech X52)
- Hori, 8BitDo, PowerA, other third-party gamepads
- A Custom profile for the Extended category. Build a HID descriptor from scratch with up to 8 axes, 128 buttons, 4 POV hats.
- Any Xbox, PlayStation, or Extended virtual controller
- DirectInput force feedback (PID effects)
- Custom HID descriptors for niche games or dev work
HIDMaestro auto-installs on first engine start. The Settings page's HIDMaestro card is status-only. There is no Install button. PadForge already runs elevated (requireAdministrator in the manifest), so no extra UAC prompt fires for the driver registration. The card flips to a green Installed dot once HMContext.InstallDriver() returns. After that, Xbox, PlayStation, and Extended slots are available on the Dashboard.
There is no in-app Uninstall button for HIDMaestro. The driver does not behave like an ordinary user-mode component, and removing it through Device Manager or pnputil is not supported. If you stop using PadForge, deleting the EXE leaves HIDMaestro registered but inert. It only services PadForge's virtual-device creation requests.
For the contract between PadForge and HIDMaestro, see HIDMaestro Deep Dive.
Hides physical controllers from apps so games only see PadForge's virtual ones. Fixes the "double input" problem where every press counts twice because games detect the real pad and the virtual one at the same time.
- Button presses counting twice
- Menus scrolling at double speed
- Jerky or doubled character movement
- Two controllers in a game when only one is plugged in
- Games auto-picking the wrong controller
Installing it before any of these show up is a fine plan.
PadForge runs HidHide on its own. You do not need the HidHide Configuration Client.
| Feature | Detail |
|---|---|
| Per-device hiding | Toggle Hide from games on each device card (Devices page). |
| Automatic whitelist | PadForge adds itself so it can still read hidden controllers, then drops the entry on exit. |
| Engine-aware | Hiding holds only while the engine runs. Stop the engine or close PadForge and the controllers reappear. |
| Master switch | Settings > Input Engine > Hide devices from games (global on/off). |
Other controller utilities (Steam Input, for example) need their own whitelist entry to see hidden controllers.
- Add... browses for an .exe.
- Remove drops the selected entry.
- Open Settings. Scroll to HidHide Driver.
- Click Install. The bundled installer runs through PadForge's already-elevated session (no extra UAC prompt).
- A restart may be needed for full effect. Restart if hiding does not work right away.
- Turn off Hide from games on every device. Uninstall stays disabled while any device has hiding on.
- Open Settings. Scroll to HidHide Driver.
- Click Uninstall. The uninstaller runs through the same already-elevated session.
Every physical controller becomes visible again the moment the driver leaves.
System-wide virtual MIDI endpoint ("PadForge MIDI") that any music app can subscribe to. Turns a gamepad into a MIDI controller. No loopMIDI bridge needed.
- Driving a DAW (Ableton Live, FL Studio, Reaper) from a gamepad
- Playing MIDI notes from controller buttons during a live set
- Sending MIDI CC from sticks and triggers to synth parameters
- Feeding VJ or stage-lighting software that takes MIDI
Needs Windows 11 24H2 (build 26100) or later. On older Windows the Install button stays disabled.
- Open Settings. Scroll to Windows MIDI Services.
- Click Install.
- PadForge downloads the installer from GitHub (around 210 MB). A progress overlay appears.
- The installer runs on its own. The dot turns green when it finishes.
- Delete or retype every MIDI slot on the Dashboard.
- Open Settings. Scroll to Windows MIDI Services.
- Click Uninstall.
PadForge ships a fork of OpenXInput bundled inside the single-file EXE at Resources/OpenXInput/x64/xinput1_4.dll. At launch PadForge calls SetDllDirectory on the single-file extract directory so the loader resolves PadForge's copy ahead of C:\Windows\System32\xinput1_4.dll. The fork's XInputGetState and XInputGetCapabilities filter out the HIDMaestro virtual controllers PadForge created, so PadForge does not re-enumerate its own outputs as physical inputs.
devobj.dll is deliberately not bundled. OpenXInput's source tree contains a stub devobj.dll only to satisfy xinput1_4.dll's static-link import at compile time. Shipping the stub would hijack setupapi.dll's own DevObj* imports and crash HID class enumeration (see PadForge #69). The system devobj.dll resolves from System32 unaided.
This filter only affects PadForge. Other apps (games, Steam) load the system XInput and see PadForge's virtual controllers normally. That's the point of having virtual controllers.
No setting. No install. No uninstall. The shim ships with PadForge and goes away when you delete the PadForge folder.
For the wider architecture see HIDMaestro Deep Dive. The OpenXInput shim is one of four filter surfaces (OpenXInput fork on the XInput API, SDL3 fork on the DirectInput / Raw Input / HIDAPI enumeration paths, XboxImpulseHidWriter on the raw-HID write path for Xbox One+ rumble, and HidHideController for the cloak whitelist).
ViGEmBus and vJoy were both required by PadForge v2. v3 dropped both for HIDMaestro. On first v3 launch, PadForge looks for either driver. If it finds one, a cleanup dialog offers to uninstall it.
| Action in the dialog | What happens |
|---|---|
| Uninstall both | PadForge calls pnputil to remove ViGEmBus and vJoy. Reboot when prompted. |
| Keep them | The dialog closes. The drivers stay installed. They will not interfere with HIDMaestro but they take up space. |
| Remind me later | The dialog returns on the next launch. |
You can also reopen the cleanup dialog by hand from Settings > Drivers > Legacy cleanup when ViGEmBus or vJoy is still detected.
| Driver / Service | Windows 10 (x64) | Windows 11 (x64) | Windows 11 24H2+ (x64) | ARM64 | x86 (32-bit) |
|---|---|---|---|---|---|
| HIDMaestro | Yes | Yes | Yes | * | * |
| HidHide | Yes | Yes | Yes | No | No |
| Windows MIDI Services | No | No | Yes | No | No |
| Keyboard+Mouse (no driver) | Yes | Yes | Yes | Yes | Yes |
- HIDMaestro is a user-mode UMDF2 driver. ARM64 and x86 support tracks the HIDMaestro project. Check the HIDMaestro releases for current status.
- HidHide is an x64 kernel driver. It does not run on ARM64 (Snapdragon laptops) or 32-bit Windows.
- Windows MIDI Services needs Windows 11 24H2 (build 26100)+. The Install button auto-disables on older Windows.
- Keyboard+Mouse uses standard Win32 APIs. Works everywhere with no driver.
- PadForge itself runs on Windows 10 and every Windows 11 build.
PadForge blocks driver removal while a slot still needs it.
| Driver | Uninstall blocked when |
|---|---|
| HIDMaestro | Any Xbox, PlayStation, or Extended slot exists. |
| HidHide | Any device has "Hide from games" on. |
| MIDI Services | Any MIDI slot exists. |
Delete the slots or turn the feature off. Then Uninstall becomes available.
| Problem | Fix |
|---|---|
| Click Install and nothing happens | The UAC prompt may be hidden behind another window. Check the taskbar and click Yes. |
| Dot stays red after install | Retry. If it still fails, restart the PC and retry. |
| HIDMaestro install fails | A v2-era ViGEmBus or vJoy install can leave registry stragglers. Run the legacy driver cleanup dialog from Settings > Drivers > Legacy cleanup. Then retry. |
| MIDI Services download fails | Check the internet connection. PadForge pulls about 210 MB from GitHub. |
| MIDI Install button disabled | Needs Windows 11 24H2 (build 26100)+. Check Settings > System > About in Windows. |
| Problem | Fix |
|---|---|
| Xbox / PlayStation / Extended buttons grayed in Add Controller | Install HIDMaestro. |
| MIDI button grayed or missing | Install MIDI Services (needs Windows 11 24H2+). |
| UAC prompt on every launch | Expected. PadForge's app.manifest declares requireAdministrator, so Windows prompts at startup. The HIDMaestro auto-install and HidHide whitelist edits run inside that already-elevated session without a second prompt. |
| Double input (every press counts twice) | Install HidHide. Turn on Hide from games for the physical controller on the Devices page. |
| Double input still there after HidHide | Restart the game. Some games only enumerate controllers at launch. Restart the PC if the install was new. |
| Virtual controller shows up but games do not see it | The bundled OpenXInput xinput1_4.dll extracts to %TEMP%\.net\PadForge\<hash>\ on each launch and SetDllDirectory makes it resolve before C:\Windows\System32\xinput1_4.dll. If a security tool or cleaner is wiping the extract folder mid-session, exclude %TEMP%\.net\ from real-time scans. Steam's own controller integration also re-enumerates after launch — restart the game once after PadForge is running. |
| HIDMaestro slot stuck on "Initializing" | The HIDMaestro lifecycle runs on a thread pool and can take a few seconds. If it never finishes, check Settings > HM inactivity destroy timeout. A slot whose mapped devices go offline has its live virtual controller torn down after that timeout. The slot config stays. The controller recreates when the devices come back. |
| Problem | Fix |
|---|---|
| HidHide hides controllers from other apps | Add those apps to the whitelist on the Settings page (see HidHide Whitelisted Applications). |
| Antivirus flags a driver installer | HIDMaestro and HidHide are open-source, signed drivers. Add an exception or pause real-time scanning during install. |
- Installation: first-time setup and driver install.
- Settings: where the driver cards live.
- Dashboard: at-a-glance driver status.
- Controller Slots: which driver each slot type needs.
- Devices: per-device hiding with HidHide.
- HIDMaestro Deep Dive: how PadForge talks to HIDMaestro.
- Troubleshooting: more help.