次の方法で共有


NtCancelIoFileEx 関数

指定したファイル ハンドルに対する未処理の I/O 操作をマークします。 関数は、I/O 操作を作成したスレッドに関係なく、現在のプロセスの I/O 操作のみを取り消します。

注意

この関数は、 CancelIoEX Win32 関数と同等のユーザー モードです。

構文

BOOL WINAPI NtCancelIoFileEx(
  _In_     HANDLE       hFile,
  _In_opt_ LPOVERLAPPED lpOverlapped
);

パラメーター

hFile [in]

ファイルのハンドル。

lpOverlapped [in, optional]

非同期 I/O に使用されるデータを含む OVERLAPPED データ構造へのポインター。

このパラメーターが NULL の場合、 hFile パラメーターに対するすべての I/O 要求は取り消されます。

このパラメーターが NULL でない場合は、指定された lpOverlapped 重複構造を持つファイルに対して発行された特定の I/O 要求のみが取り消し済みとしてマークされます。つまり、 NtCancelIoFile 関数はファイル ハンドルのすべての未処理の要求を取り消しながら、1 つ以上の要求を取り消すことができます。

戻り値

関数が成功すると、戻り値は 0 以外になります。 指定されたファイル ハンドルに対して呼び出しプロセスによって発行されたすべての保留中の I/O 操作の取り消し操作が正常に要求されました。 アプリケーションが完了するまで、取り消された I/O 操作に関連付けられている OVERLAPPED 構造体を解放したり再利用したりしてはなりません。 スレッドは GetOverlappedResult 関数を使用して、I/O 操作自体がいつ完了したのかを判断できます。

関数が失敗した場合、戻り値は 0 (ゼロ) になります。 拡張エラー情報を取得するには、 GetLastError 関数を呼び出します。

この関数で取り消す要求が見つからない場合、戻り値は 0 (ゼロ) で、GetLastError はERROR_NOT_FOUNDを返します。

解説

NTCancelIoFileEx 関数を使用すると、呼び出し元スレッド以外のスレッドの要求を取り消すことができます。 NtCancelIoFile 関数は、NtCancelIoFile 関数を呼び出したのと同じスレッド内の要求のみを取り消します。 NtCancelIoFileEx はハンドルの未処理の I/O のみを取り消し、ハンドルの状態は変更しません。これは、操作が正常に完了したか取り消されたかを把握できないため、ハンドルの状態に依存できないことを意味します。

指定したファイル ハンドルに対して保留中の I/O 操作が進行中の場合、 NtCancelIoFileEx 関数はそれらをキャンセルとしてマークします。 ほとんどの種類の操作はすぐに取り消すことができます。他の操作は、実際に取り消されて呼び出し元に通知される前に、完了に向けて続行できます。 NtCancelIoFileEx 関数は、取り消されたすべての操作の完了を待機しません。

ファイル ハンドルが完了ポートに関連付けられている場合、同期操作が正常に取り消された場合、I/O 完了パケットはポートにキューに登録されません。 非同期操作がまだ保留中の場合、取り消し操作は I/O 完了パケットをキューに入れます。

取り消される操作は、3 つの状態のいずれかで完了します。完了状態を確認するには、完了状態をチェックする必要があります。 3 つの状態は次のとおりです。

  • 操作は正常に完了しました。 これは、操作が取り消された場合でも発生する可能性があります。これは、操作を取り消すために取り消し要求が送信されなかった可能性があるためです。
  • 操作は取り消されました。 GetLastError 関数は、ERROR_OPERATION_ABORTEDを返します。
  • 操作が別のエラーで失敗しました。 GetLastError 関数は、関連するエラー コードを返します。

Windows 8とWindows Server 2012では、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル
はい
SMB 3.0 Transparent Failover (TFO)
Yes
SMB 3.0 とスケールアウト ファイル共有 (SO)
Yes
クラスター共有ボリューム ファイル システム (CsvFS)
はい
Resilient File System (ReFS)
はい

必要条件

要件
ヘッダー
ntioapi.h
ライブラリ
ntdll.lib

関連項目

NtCancelIoFile