This problem is caused by a bug in the Microsoft USB 1.1 & 2.0 Host Controller Port driver (USBPORT.SYS). USBPORT fails to synchronize access to the pipe list for a USB device, which may result in an inconsistent (corrupted) pipe list under certain conditions.
This bug is only be likely to be exposed when the USB device is a Composite device, with multiple logical USB devices implemented as children of one physical (parent) USB device.
In this scenario, one function driver is selecting the Interface for its function, which removes the pipes associated with the previous Interface from the device's pipe list. This operation is not protected by a lock (is not atomic), and leaves the pipe list in an inconsistent state for a short period of time.
Meanwhile, another function driver is performing transfers to or from one of its pipes. While processing a new USB transfer, USBPORT walks the device's pipe list to validate the USB pipe that is the target of the transfer, encounters a pipe being removed from the list, dereferences the NULL link pointer from the pipe being removed, and causes the Stop D1 bugcheck.