共用方式為


CancelIoEx 函式 (ioapiset.h)

標記指定之檔句柄的任何未完成 I/O 作業。 不論哪個線程建立 I/O 作業,函式只會取消目前進程中的 I/O 作業。

語法

BOOL CancelIoEx(
  [in]           HANDLE       hFile,
  [in, optional] LPOVERLAPPED lpOverlapped
);

參數

[in] hFile

檔案的句柄。

[in, optional] lpOverlapped

重疊數據結構的指標,其中包含用於異步 I/O 的數據。

如果此參數為 NULL則會取消 hFile 參數的所有 I/O 要求。

如果此參數不是 NULL,則只有針對具有指定 lpOverlapped 重疊結構的檔案發出的特定 I/O 要求會標示為已取消,這表示您可以取消一或多個要求,而 CancelIo 函式會取消檔句柄上所有未處理的要求。

傳回值

如果函式成功,則傳回非零的值。 已成功要求指定之檔案句柄之呼叫進程所發出之所有擱置 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完成封包排入佇列。

正在取消的作業已完成,狀態為三種狀態之一;您必須檢查完成狀態,才能判斷完成狀態。 這三種狀態為:

  • 作業正常完成。 即使作業已取消,也會發生這種情況,因為取消要求可能尚未在時間提交來取消作業。
  • 已取消作業。 GetLastError 函式會傳回ERROR_OPERATION_ABORTED
  • 作業失敗,發生另一個錯誤。 GetLastError 函式會傳回相關的錯誤碼。
在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。
技術 支援
伺服器消息塊 (SMB) 3.0 通訊協定 Yes
SMB 3.0 透明故障轉移 (TFO) Yes
具有向外延展檔案共用的SMB 3.0 (SO) Yes
叢集共用磁碟區文件系統 (CsvFS) Yes
彈性檔案系統 (ReFS) Yes

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 ioapiset.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CancelIo

CancelSynchronousIo

取消擱置的 I/O 作業

檔案管理功能

同步和異步 I/O