I have tried to work through the original firmware as much as possible to find out about the USB setup, but with the lack of documentation about the USB peripheral in the F1C100s it was not easy to get to a working setup. Since I only use Linux for my development, I never tried it on Windows.
The way you can try to find out why it is taking so long on Windows is to look into the communication with Wireshark. I have no idea if it works on Windows for capturing USB communication, but it does on Linux and has helped me during the development. USB is tricky and I tried to keep the code as simple as possible. It might be that I left out some actions needed on Windows for faster connection.
My code is based on samples I found on the internet and some documentation about mass storage and SD cards. Adapted it until it worked fine for me under Linux. Not very professional I know, but it is just hobby. Not earning any money of it.
The code is divided based on the layers. The usb_interface handles the low level part of the communication (the end points) and the mass_storage_class does the middle layer. This is the translation of the commands send via USB to communicate with the SD card. The sd_card_interface is used to connect to the SD card.
Maybe Windows is using the mass storage reset command, which is not implemented, but there is something in comments in the usb_interface about it.
All I can say, the basis is there and success playing with it.