Правильно ли предположить, что GetLastError (и варианты) являются для каждого потока или для каждого процесса? Проблемы, связанные с процессом, несколько очевидны в многопоточных приложениях, потому что нет способа гарантировать, что между вашими ошибочными вызовами и GetLastError не было никаких других вызовов Win32. Иногда значение GetLastError важно.
Например, AcceptEx вернет FALSE (сбой), если вы используете порты завершения ввода-вывода. WSAGetLastError (аналогично GetLastError) вернет ERROR_IO_PENDING, чтобы сообщить вам, что он отложен и ошибка не вызвана чем-то другим. Проблема в том, что десятки других звонков могут быть в полете и перезаписать это значение.
Являются ли эти вызовы потоком или процессом? Если процесс конкретный, то как вы справляетесь с этим правильно?