Возвращает неправильный размер буфера и данные в нем если память под буфер выделена на стэке и если вызовы InternetReadFileEx асинхронные причем между ними буфер освобождается. Исправляется тем что память выделяется на куче (heap) причем она может даже освобождатсья между вызовами и это как ни странно работает. Я в шоке :)