INFO: Canceling Overlapped I/O (90368)



The information in this article applies to:

  • Microsoft Win32 Application Programming Interface (API), when used with:
    • the operating system: Microsoft Windows 95
    • the operating system: Microsoft Windows NT 3.1
    • the operating system: Microsoft Windows NT 3.5
    • the operating system: Microsoft Windows NT 3.51
    • the operating system: Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP

This article was previously published under Q90368

SUMMARY

You can use the CancelIo() API function to cancel overlapped I/O. This function is available on Microsoft Windows NT 4.0. Previous versions of Windows NT and Windows 95 do not have CancelIo(), but there are alternative methods to cancel an asychronous I/O operation.

MORE INFORMATION

Windows NT 4.0 introduces a new API function to cancel overlapped I/O. Please see the Win32 SDK Function Reference for CancelIo() for more information.

Prior to Windows NT 4.0, and with Windows 95, there is no routine in the Win32 API to cancel an asynchronous request once it has been issued. When a thread does an overlapped I/O, the system starts up another thread to do the I/O and leaves your thread free to do other work. Once it is started, there is no way to stop it. If it necessary to interrupt the I/O, you can either:
  • Split the writes into batches and check for interruptions. For example, you could break a 20 megabyte (MB) write into 20, 1 MB writes.

    -or-
  • Create another thread yourself to handle the I/O. By terminating the thread, you cancel the I/O. You should have a thread in the process that explicitly closes the handle to the device.

    -or-
  • Close the handle to the device with the pending I/O. The close has the net effect of canceling the I/O.

Modification Type:MajorLast Reviewed:4/12/2004
Keywords:kbAPI kbFileIO kbinfo kbKernBase kbProgramming KB90368