CancelIoEx

指定ファイルハンドルに対する未完了 I/O 操作にキャンセル印を付ける。この関数は、I/O 操作を作成したスレッドに関わらず、現在のプロセス内の I/O 操作のみをキャンセルする。

CancelIoEx hFile, lpOverlapped

hFile : [intptr] ファイルへのハンドル。
lpOverlapped : [var] 非同期 I/O に使用されるデータを含む OVERLAPPED データ構造へのポインタ。このパラメータが NULL の場合、hFile パラメータのすべての I/O 要求がキャンセルされる。NULL でない場合、指定された lpOverlapped オーバーラップ構造体で発行された特定の I/O 要求のみがキャンセル対象としてマークされる。つまり、1 つまたは複数の要求をキャンセルできるのに対し、CancelIo 関数はファイルハンドル上のすべての未完了要求をキャンセルする。

(プラグイン / モジュール : kernel32.dll)

解説

指定ファイルハンドルに対する未完了 I/O 操作にキャンセル印を付ける。この関数は、I/O
操作を作成したスレッドに関わらず、現在のプロセス内の I/O 操作のみをキャンセルする。

[戻り値]
関数が成功した場合、戻り値はゼロ以外。指定ファイルハンドルに対し呼び出し側プロセスが発行した保留中の I/O
操作すべてのキャンセル要求が正常に送信された。アプリケーションはキャンセルした I/O 操作に関連付けられた OVERLAPPED
構造体が完了するまで、それを解放または再利用してはならない。スレッドは GetOverlappedResult 関数を使って I/O
操作自体が完了した時点を判定できる。関数が失敗した場合、戻り値は 0(ゼロ)。拡張エラー情報を取得するには GetLastError
関数を呼ぶ。キャンセル対象の要求が見つからなかった場合、戻り値は 0(ゼロ)で、GetLastError は
ERROR_NOT_FOUND を返す。

[備考]
CancelIoEx 関数は呼び出しスレッド以外のスレッドでも要求をキャンセルできる。CancelIo 関数は CancelIo
を呼んだスレッドと同じスレッド内の要求のみをキャンセルする。CancelIoEx はハンドル上の未完了 I/O
のみをキャンセルし、ハンドルの状態は変更しない。つまり、操作が正常に完了したのかキャンセルされたのかは分からないので、ハンドルの状態に依存してはならない。指定ファイルハンドルに対して進行中の
I/O 操作があれば、CancelIoEx
関数はそれらをキャンセル対象としてマークする。ほとんどの種類の操作は直ちにキャンセルできるが、他の操作は実際にキャンセルされて呼び出し側に通知される前に完了まで進行することもある。CancelIoEx
関数はキャンセルされたすべての操作の完了を待たない。ファイルハンドルが完了ポートに関連付けられている場合、同期操作が正常にキャンセルされたときは
I/O 完了パケットはポートにキューされない。まだ保留中の非同期操作については、キャンセル操作によって I/O
完了パケットがキューされる。キャンセルされる操作は 3
つのうちいずれかのステータスで完了する。どの状態で完了したかを判定するには完了ステータスを確認する必要がある。3
つのステータスは以下のとおり:
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs