да. в этом случае вы можете позвонить GetOverlappedResult
.
в вашем конкретном случае, если ReadFile
возвращает true
, означает, что операция io уже завершена. GetOverlappedResult
со своей стороны прежде всего проверьте IO_STATUS_BLOCK
в начале OVERLAPPED
. проверено больше бетона Internal
(NTSTATUS Status
) для STATUS_PENDING
Код состояния для запроса ввода-вывода. Когда запрос выдан,
система устанавливает этот элемент на STATUS_PENDING
, чтобы указать, что
операция еще не началась. Когда запрос завершен,
система устанавливает для этого участника код состояния для выполненного запроса.
если здесь не STATUS_PENDING
(Status != STATUS_PENDING
) GetOverlappedResult
понять, что io уже завершено. если это состояние ошибки (Status < 0
), преобразуйте его в ошибку win32 и установите последнюю ошибку, в противном случае прочитайте InternalHigh
( Количество байтов, переданных для запроса ввода-вывода. Система устанавливает этот элемент, если запрос завершен без ошибок. ) и скопируйте его в *lpNumberOfBytesTransferred
.
так в вашем случае - Status != STATUS_PENDING
и Status >= 0
(потому что ReadFile
возвращает true
) - и GetOverlappedResult
просто вернет вам true
и установите *lpNumberOfBytesTransferred = (DWORD)lpOverlapped->InternalHigh