Подумал, что может быть разные потоки качают одни и те же фрагменты файла и на этом тратится время. Поэтому немного переделал.
Для работы с файлом написал отдельный класс, он выдает указатели, хранит информацию о том, какой поток чего качает и тд. Вся работа с ним производится в CriticalSection'ах. Ведется лог, из него я узнал, что повторных записей нет. Но есть такая странная штука.
Создал 8 потоков. Большую часть данных загружает 1 поток, примерно 120 из 130 записей в файл, еще 1 — 7/130 и 3 по 1/130. 3 потока не загружали ваще ничего!
Такое ощущение что WinINet создает какой-то 1 канал на всех и дает его каждому на какое-то время.
Время загрузки естессно не уменьшилось.