|
Overview |
|
|
|
Group |
|
|
|
Quick Info
Windows NT
| Yes
| Win95
| Yes
| Win32s
| No
| Import Library
| kernel32.lib
| Header File
| winbase.h
| Unicode
| No
| Platform Notes
| Windows 95 limitations
|
|
|
ReadFileEx
The
ReadFileEx function reads data from a file asynchronously. It is designed solely for
asynchronous operation, unlike the
ReadFile function, which is designed for both synchronous and asynchronous operation.
ReadFileEx lets an application perform other processing during a file read operation.
The
ReadFileEx function reports its completion status asynchronously, calling a specified
completion routine when reading is completed and the calling thread is in an
alertable wait state.
BOOL ReadFileEx(
HANDLE hFile,
| // handle of file to read
|
LPVOID lpBuffer,
| // address of buffer
|
DWORD nNumberOfBytesToRead,
| // number of bytes to read
|
LPOVERLAPPED lpOverlapped,
| // address of offset
|
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
| // address of completion routine
|
);
|
|
Parameters
hFile
An open handle that specifies the file entity to be read from. This file
handle must have been created with the FILE_FLAG_OVERLAPPED flag and must have
GENERIC_READ access to the file.
Windows NT: hFile can be any handle opened with the FILE_FLAG_OVERLAPPED flag by the
CreateFile function, or a socket handle returned by the
socket or
accept functions.
Windows 95: hFile can be a communications resource, mailslot, or named pipe handle opened with
the FILE_FLAG_OVERLAPPED flag by
CreateFile, or a socket handle returned by the
socket or
accept functions. Windows 95 does not support asynchronous operations on disk files.
lpBuffer
Points to a buffer that receives the data read from the file.
This buffer must remain valid for the duration of the read operation. The
application should not use this buffer until the read operation is completed.
nNumberOfBytesToRead
Specifies the number of bytes to be read from the file.
lpOverlapped
Points to an
OVERLAPPED data structure that supplies data to be used during the asynchronous
(overlapped) file read operation.
If the file specified by
hFile supports the concept of byte offsets, the caller of
ReadFileEx must specify a byte offset within the file at which reading should begin. The
caller specifies the byte offset by setting the
OVERLAPPED structure's
Offset and
OffsetHigh members.
If the file entity specified by
hFile does not support the concept of byte offsets
for example, if it is a named pipe
the caller must set the
Offset and
OffsetHigh members to zero, or
ReadFileEx fails.
The
ReadFileEx function ignores the
OVERLAPPED structure's
hEvent member. An application is free to use that member for its own purposes in the
context of a
ReadFileEx call.
ReadFileEx signals completion of its read operation by calling, or queueing a call to,
the completion routine pointed to by
lpCompletionRoutine, so it does not need an event handle.
The
ReadFileEx function does use the
OVERLAPPED structure's
Internal and
InternalHigh members. An application should not set these members.
The
OVERLAPPED data structure pointed to by
lpOverlapped must remain valid for the duration of the read operation. It should not be a
variable that can go out of scope while the file read operation is in progress.
lpCompletionRoutine
Points to the completion routine to be called when the read operation is
complete and the calling thread is in an alertable wait state. For more information
about the completion routine, see
FileIOCompletionRoutine.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error
information, call
GetLastError.
If the function succeeds, the calling thread has an asynchronous I/O
(input/output) operation pending: the overlapped read operation from the file. When this
I/O operation completes, and the calling thread is blocked in an alertable
wait state, the system calls the function pointed to by
lpCompletionRoutine, and the wait state completes with a return code of WAIT_IO_COMPLETION.
If the function succeeds, and the file reading operation completes, but the
calling thread is not in an alertable wait state, the system queues the
completion routine call, holding the call until the calling thread enters an alertable
wait state. For information about alertable waits and overlapped input/output
operations, see
Synchronization and Overlapped Input and Output.
If
ReadFileEx attempts to read past the end of the file, the function returns zero, and
GetLastError returns ERROR_HANDLE_EOF.
Remarks
If a portion of the file specified by
hFile is locked by another process, and the read operation specified in a call to
ReadFileEx overlaps the locked portion, the call to
ReadFileEx fails.
If
ReadFileEx attempts to read data from a mailslot whose buffer is too small, the function
returns FALSE, and
GetLastError returns ERROR_INSUFFICIENT_BUFFER.
Applications must not read from nor write to the input buffer that a read
operation is using until the read operation completes. A premature access to the
input buffer may lead to corruption of the data read into that buffer.
The
ReadFileEx function may fail if there are too many outstanding asynchronous I/O
requests. In the event of such a failure,
GetLastError can return ERROR_INVALID_USER_BUFFER or ERROR_NOT_ENOUGH_MEMORY.
To cancel all pending asynchronous I/O operations, use the
CancelIO function. This function only cancels operations issued by the calling thread
for the specified file handle. I/O operations that are canceled complete with
the error ERROR_OPERATION_ABORTED.
If
hFile is a handle to a named pipe or other file entity that doesn't support the
byte-offset concept, the
Offset and
OffsetHigh members of the
OVERLAPPED structure pointed to by
lpOverlapped must be zero, or
ReadFileEx fails.
An application uses the
MsgWaitForMultipleObjectsEx,
WaitForSingleObjectEx,
WaitForMultipleObjectsEx, and
SleepEx functions to enter an alertable wait state. For more information about
alertable waits and overlapped input/output, refer to those functions' reference and
Synchronization.
Windows 95: On this platform, neither
ReadFileEx nor
WriteFileEx can be used by the comm ports to communicate. However, you can use
ReadFile and
WriteFile to perform asynchronous communication.
See Also
CancelIo,
CreateFile,
FileIOCompletionRoutine,
MsgWaitForMultipleObjectsEx,
OVERLAPPED,
ReadFile,
SleepEx,
WaitForMultipleObjectsEx,
WaitForSingleObjectEx,
WriteFileEx
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database