У меня есть устройство, которое генерирует сообщения через последовательный порт. Когда я перезагружаю устройство, порт завершения ввода-вывода прекращает чтение байтов.
Код вызывает CallQueuedCompletionStatus ():
BOOL bRet = GetQueuedCompletionStatus(
m_hCompletionPort,
&dwBytesTransferred,
&dwCompletionKey,
&pOverlapped,
INFINITE);
PortMon выглядит так:
...
IRP_MJ_WRITE Serial1 SUCCESS LENGTH: 7 REBOOT.
IRP_MJ_READ Serial1 CANCELLED LENGTH: 1
В журнале показывается следующий результат:
bRet=true, dwBytesTransferred=7, pOverlapped=0x0202B028, GetLastError()=997
(sleep forever)
Есть ли способ обнаружить этот сбой и восстановить связь?
Я могу наблюдать за тепловым ударом и закрывать / открывать последовательный порт, но не совсем правильно, что Windows API позволяет последовательной связи молча обрываться так.