And no, it isnt about controling CPU speed from a user mode app.
It is USB bridging. So a device plugged into a PC is bridged out to hardware which is a ‘double ender’ device, which in turn is connected to another PC.
All devices plugged into the first PC have to appear exactly as themselves on the far-pc, and the configuration selected, and vendor data, driven by the far-end PC, has to be sent back to the original device. (Hence the report descriptor harvesting).
It involves a host filter driver to intercept child PDO creation, thanks Alex for your help on the details of that (IoAttachDeviceToDeviceStack can take a PDO even if the device stack isnt built up yet), the child PDO filter that gets attached, and modifies the device ID. An FDO driver for that device ID, and a receiver driver for the ‘double-ender’ device that is controled by the replacement FDO.
Its all very slick and works nicely.
I do like these out of the ordinary type jobs, they do push the design a lot!
Thanks for your help guys