CancelIo 関数 (ioapiset.h)
指定したファイルの呼び出し元スレッドによって発行されたすべての保留中の入出力 (I/O) 操作を取り消します。 この関数では、他のスレッドでファイル ハンドルに対して発行された I/O 操作は取り消されません。
別のスレッドから I/O 操作を取り消すには、CancelIoEx 関数を使用します。
構文
BOOL CancelIo(
[in] HANDLE hFile
);
パラメーター
[in] hFile
ファイルへのハンドル。
この関数は、このファイル ハンドルに対するすべての保留中の I/O 操作を取り消します。
戻り値
関数が成功すると、戻り値は 0 以外になります。 指定したファイル ハンドルに対して呼び出し元スレッドによって発行されたすべての保留中の I/O 操作の取り消し操作が正常に要求されました。 スレッドでは、GetOverlappedResult 関数を使って、I/O 操作自体がいつ完了したかを判断できます。
関数が失敗した場合は、0 を返します。 エラーの詳細情報を得るには、GetLastError 関数を呼び出します。
解説
指定したファイル ハンドルに対して保留中の I/O 操作が進行しており、呼び出し元のスレッドによって発行された場合、これらは CancelIo 関数によって取り消されます。 CancelIo ではハンドルの未処理の I/O のみが取り消され、ハンドルの状態は変更されません。これは、操作が正常に完了したか取り消されたかを把握できないため、ハンドルの状態に依存できないことを意味します。
I/O 操作は、重複した I/O として発行されている必要があります。 そうでない場合、I/O 操作は戻らず、スレッドで CancelIo 関数を呼び出すことはできません。 FILE_FLAG_OVERLAPPED で開かれていないファイル ハンドルを使用して CancelIo 関数を呼び出しても、何も行われません。
取り消されたすべての I/O 操作は、エラー ERROR_OPERATION_ABORTED で完了し、I/O 操作のすべての完了通知が正常に行われます。
Windows 8 と Windows Server 2012 では、この関数は次のテクノロジでサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | はい |
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | ioapiset.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |