Господа, прошу помощи: Делается операция асинхронного чтения из СОМ-порта (ReadFile) Далее проверяется результат возвращаемый ф-ей ReadFile: Если "1", то операция полностью завершена и мы прочитали столько байт из порта сколько и запрашивали. Если "0" и ф-я GetLastError возвращает нам ERROR_IO_PENDING, значит операция ReadFile выполняется в фоне и мы ожидаем ее завершения в функции GetOverlappedResult. Так вот, GetOverlappedResult возвращает нам не все байты, которые были приняти из СОМ-порта, а только часть. Оставшаяся часть сидит где-то в буферах винды и выйдет оттуда только при следующем приеме. Тоесть винда отдает нам байты принятые из СОМ-порта порциями, примерно по 10 .. 30 байт и пока она эту порцию не накопит, она нам ничего не отдаст. Тоесть если длина сообщения допустим равна 15 байт, то мы либо сразу можем их все получить(Readfile возвратил 1), либо получить 10 байт(после GetOverlappedResult) , а оставшеся 5 засядут в приемном буфере винды. Вот собственно и вопрос: Как сделать, чтобы GetOverlappedResult возвращал нам ВСЕ, что накоплено в приемном буфере допустим по истечении таймаута ? (SetCommTimeouts у меня установлен в заведомо большее значение, чем требуется для приема необходимого числа байт) Код (Text): ;процедура приема данных ;вход: lpBuff - указатель на буфер, dwSize - размер буфера ;выход: eax == число прочитанных байт ReadCOM proc lpBuff, dwSize: DWORD invoke ReadFile, hCOM, lpBuff, dwSize , offset dwLength, offset o2 ; Читаем из порта асинхронно test eax, eax ; Ноль ? jne @end ; Нет. Операция завершена invoke GetLastError ; Да ноль. cmp eax, ERROR_IO_PENDING ; Операция выполняется в фоне ? jnz @Err ; Нет ? Ну тогда ошибка ! invoke GetOverlappedResult, hCOM, offset o2, offset dwLength, 1 ; Да. Ждем ее завершения test eax,eax ; Не выйдет пока не завершится операция чтения jne @end ; Все ок, валим отсюда. @Err: invoke ClearCommError, hCOM, offset tmp1, offset ComStat sub eax, eax ret @end: invoke ResetEvent, o2.hEvent ; Сбросили событие. Все прочитано mov eax, dwLength ; Сколько прочитали байтов. ret ReadCOM endp