You can keep the application from handing by using asynchronous (overlapped) ReadFiles with a timeout. See my HID code for examples:
http://www.lvr.com/hidpage.htm#MyExampleCodeIf the device firmeware is crashing, you need to debug that. A hardware protocol analyzer can offer clues about what is happening on the bus.
Jan