10
votes

I'm investigating options available for creating a virtual USB device (say, a keyboard or a mass storage device), so to emulate its function as needed and to allow a userspace app to emulate its insertion/removal at will.

What I am not clear about is how to go about the emulation of insertion/removal. It seems that one option is to emulate a (virtual) USB hub and have it fake the device arrival/departure events (and I would also supply the device driver for my virtual USB device and that's where my device logic will reside).

I know my way around Windows kernel (having written NDIS miniport drivers), not afraid of SoftICE, but USB is not my domain, just starting out with it.

Am I on the right track with the virtual hub approach? If so, is developing virtual hub drivers supported by WDK (it doesn't seem to be)?

Any other options?

--

(Edit) Forgot to mention - I am aware of DSF, but it is not supported on W8.

2
Have you looked at the USBIP project (ons sourceforge)? Their USB over IP implementation does exactly that, and they provide very stable Windows drivers! You might end up writing an USB/IP server as th easier (and network-transparent as a bonus) alternative.Eugen Rieck
Duh! I know of the project, but I have no idea why I haven't looked at how they emulate device insertion/removal. Very helpful, Eugen. Thanks a lot.Angstrom
Angstrom, I might have forgotten myself, had I not just been fooling around with it a short while ago: Two USB devices, both using the exact same chip, but different VID/PIDs - one vendor providing no drivers for newer Windows versions, the other does, but hard-locked to VID/PID ... trivially patch USBIP to change VID/PID on the fly, problem solved.Eugen Rieck
Elegant :) Have you tested it in W8?Angstrom
TBH: None of our software supports W8 (or Vista). Only usable Windows versions are supported. Our customers ar VERY fine with this. I can ask the guys about W8.1 tomorrow and post back. The beforementioned patch was done server-sided.Eugen Rieck

2 Answers

5
votes

Am I on the right track with the virtual hub approach?

In short - yes, I was right.

That's how USBIP does it and it's a relatively simple way to go. Also, see this comment by Eugen.

1
votes

I don't know if you are aware, but Microsoft released to Win10 the UDE (USB device emulation).

In the section Write a UDE client driver they describe exactly what you want.