Wednesday, February 23, 2011

How to cancel the I/O operations for a specified file

Tip  - CancelIo ()

Details - This function cancels all pending input and output (I/O) operations that are issued by the calling thread for the specified file. The function does not cancel I/O operations that other threads issue for a file handle. To cancel I/O operations from another thread, use the CancelIoEx function.

  __in  HANDLE hFile

hFile [in]
    A handle to the file.
Ø  The function cancels all pending I/O operations for this file handle
Ø  If the function succeeds, the return value is nonzero. The cancel operation for all pending I/O operations issued by the calling thread for the specified file handle was successfully requested.
Ø  The thread can use the GetOverlappedResult function to determine when the I/O operations themselves have been completed.
Ø  If the function fails, the return value is zero (0).
Ø  If there are any pending I/O operations in progress for the specified file handle, and they are issued by the calling thread, the CancelIo function cancels them. CancelIo cancels only outstanding I/O on the handle, it does not change the state of the handle; this means that you cannot rely on the state of the handle because you cannot know whether the operation was completed successfully or canceled.
Ø  The I/O operations must be issued as overlapped I/O. If they are not, the I/O operations do not return to allow the thread to call the CancelIo function. Calling the CancelIo function with a file handle that is not opened with FILE_FLAG_OVERLAPPED does nothing.
Ø  All I/O operations that are canceled complete with the error ERROR_OPERATION_ABORTED, and all completion notifications for the I/O operations occur normally.

Posted By : Praveen V

No comments:

Post a Comment