The FileIOCompletionRoutine function is called when an asynchronous input and output (I/O) function (ReadFileEx or WriteFileEx) is completed and the calling thread is in an alertable wait (using the SleepEx, WaitForSingleObjectEx, or WaitForMultipleObjectsEx function with the fAlertable flag set to TRUE).
VOID WINAPI FileIOCompletionRoutine(
DWORD dwErrorCode, | // completion code |
DWORD dwNumberOfBytesTransfered, | // number of bytes transferred |
LPOVERLAPPED lpOverlapped | // pointer to structure with I/O information |
); |
Parameters
dwErrorCode
Specifies the I/O completion status. This parameter may be one of the following values:
Value | Meaning |
0 | The I/O was successful. |
ERROR_HANDLE_EOF | The ReadFileEx function tried to read past the end of the file. |
dwNumberOfBytesTransfered
Specifies the number of bytes transferred. If an error occurs, this parameter is zero.
lpOverlapped
Points to the OVERLAPPED structure specified by the asynchronous I/O function.
Windows does not use the hEvent member of the OVERLAPPED structure; the calling application may use this member to pass information to the completion routine. Windows does not use the OVERLAPPED structure after the completion routine is called, so the completion routine can deallocate the memory used by the overlapped structure.
Return Values
This function does not return a value.
Remarks
The FileIOCompletionRoutine function is a placeholder for an application-defined or library-defined function name.
Returning from this function allows another pending I/O completion routine to be called. All waiting completion routines are called before the alertable thread's wait is satisfied with a return code of WAIT_IO_COMPLETION. Windows may call the waiting completion routines in any order. They may or may not be called in the order the I/O functions are completed.
Each time Windows calls a completion routine, it uses some of the application's stack. If the completion routine does additional asynchronous I/O and alertable waits, the stack may grow.
See Also
OVERLAPPED, ReadFileEx, SleepEx, WaitForMultipleObjectsEx, WaitForSingleObjectEx, WriteFileEx