I've just started looking at USBTMC ... it actually appears pretty straightforward for basic use (although as pigrew pointed out there are quite a lot of exception situations if you want to do it properly.)
So the device is detected fine in Linux and OSX and I can get a request to it ... I haven't done anything with responses yet.
In Windows it's picked up as a USB Test and Measurement device but it's then not showing up in any of the tools (I've been using "NI-VISA interactive control".)
The behaviour changed when I added the serial number string to the config, it's now stuck saying "device setup in progress" in the control panel which it wasn't doing before, so I'm pretty sure it's something fairly minor with the config that I've missed.
I'm comparing with a 34470a which works fine.
Looking at a Wireshark USB trace everything appears to be identical, loads of descriptors gathering ... then the 34401a seems to respond to a URB_CONTROL_In message, where my device doesn't ... there there is a SET_DESCRIPTOR and a set of string queries on the 34401a where I'm just stuck.
I am seeing a load of "URB_Interrupt In" messages on my device, so I may try without the interrupt endpoint as a test.
EDIT: I was missing a SetPowerStatus() call, this seems to have cleared up the "device setup in progress" problem, so it all looks ok in Windows now, but still doesn't show up in NI-VISA. The device properties look identical, as do all of the events relating to the device, but still the same kind of traces. The interrupt messages are from a difference source, so not relevant here.
EDIT2: If I try to open the device directly in NI-VISA using the "USB::0x....::0x....::MY12345678::INSTR" address I get an "unknown system error", if I change the serial number to something incorrect, then I get a "device not in the system" error. So despite not finding it in a scan, it knows it's there!
EDIT3: Ok ... think I've figured it out ... the URB_CONTROL message seems to be a USBTMC specific message to EP0 which I need to trap and handle. Maybe next time I'll read the spec first ;-)
EDIT4: Yep ... now working ... gets to the same place as with Linux and OSX, it was the USBTMC GET_CAPABILITIES request. Onwards and upwards!