I can say from my own experience that it is a bad idea in general to directly reread descriptors over and over again.
USBD.SYS caches the device and the configuration descriptor which can always be queried by USBRESMG.SYS.
If it is attempted to read a string descriptor (for example to get a manufacturer name or a device name), you need to be aware of that it often is unstable (don't ask me why) and also that there is a chance that either no string descriptor exists (string id = 0), or worse, the device descriptor reports string ids <> 0 but still has no string descriptors to offer. It's a mess, as everything else with USB.
I guess THAT is the reason why someone came up with the idea to create usb.ids and I would not be surprised if Linux ONLY uses this static info to return device and manufacturer name instead of querying string descriptors.
There is also a logical FLAW in USBRESMG.SYS in that it gets totally confused if two attached devices have the very same vendor and product id (yes, this happens, even with devices that look completely different !).
That typically leads to hangs/crashes when reading string descriptors. Would need to rewrite/change USBRESMG.SYS to also take the serial number into account (I think there even is a shitty Microsoft specific descriptor for that) to distinguish devices but oh well …
Lars