An application-defined callback function used with the
ReadFileEx and
WriteFileEx functions. It is called when the asynchronous input and output (I/O) operation is completed or canceled and the calling thread is in an alertable state (using the
SleepEx,
MsgWaitForMultipleObjectsEx,
WaitForSingleObjectEx, or
WaitForMultipleObjectsEx function with the fAlertable parameter set to TRUE).
The LPOVERLAPPED_COMPLETION_ROUTINE type defines a pointer to this callback function.
FileIOCompletionRoutine is a placeholder for the application-defined function name.
Syntax
VOID CALLBACK FileIOCompletionRoutine(
__in DWORD dwErrorCode,
__in DWORD dwNumberOfBytesTransfered,
__in LPOVERLAPPED lpOverlapped
);
Parameters
- dwErrorCode [in]
-
The I/O completion status. This parameter can be one of the system error codes.
- dwNumberOfBytesTransfered [in]
-
The number of bytes transferred. If an error occurs, this parameter is zero.
- lpOverlapped [in]
-
A pointer to the
OVERLAPPED structure specified by the asynchronous I/O function.
The system 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 Value
This function does not return a value.
Remarks
The return value for an asynchronous operation is 0 (ERROR_SUCCESS) if the operation completed successfully or if the operation completed with a warning. To determine whether an I/O operation was completed succesfully, check that dwErrorCode is 0, call GetOverlappedResult, then call GetLastError. For example, if the buffer was not large enough to receive all of the data from a call to ReadFileEx, dwErrorCode is set to 0, GetOverlappedResult fails, and GetLastError returns ERROR_MORE_DATA.
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 completed with a return code of WAIT_IO_COMPLETION. The system 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 the system 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.
For more information, see
Asynchronous Procedure Calls.
Examples
For example code, see Named Pipe Server Using Completion Routines.
Requirements
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | WinBase.h (include Windows.h) |
See Also
- File Management Functions
- OVERLAPPED
- ReadFileEx
- SleepEx
- Synchronous and Asynchronous I/O
- WaitForMultipleObjectsEx
- WaitForSingleObjectEx
- WriteFileEx
Send comments about this topic to Microsoft
Build date: 11/12/2009