Overlapped IO was one of the first forms of event driven asycronous IO for Windows. It''s supported on 9x & NT kernels. On NT you have other asyncronous options that have less overhead. RS-232 is a good place to use overlapped IO. It minimizes your latency from the time data is received to the time your applications knows about it. In high-bandwidth applications overlapped IO can actually degrade performance over polling (because overlapped IO can trigger thousands of times per second, whereas you would poll upto hundreds of times per second)
I also use
m_hComFile = CreateFile(m_strComPort, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);