Use std::vector<char> to store string.

The std::string seems to be not thread-safe by default.
win: Do not use IOCP!

It's atonishing that there are two undocumented behavior of IOCP and
cost me two days to aware:
1. Close the waited handle while GetQueuedCompletionStatus is still
   waiting would cause memory corruption and make your program crash on
   some random places. (I'm sure this is undocumented, the MSDN only
   said you can not close a handle while WaitForMultipleObjects is still
   waiting, nothing in the GetQueuedCompletionStatus page)
2. If we use IOCP to get notified of readdirchange, cancelling the IO
   would NOT send a notification.

:shit: Windows