CancelIoEx 函式

標記指定之檔案控制代碼的任何未處理 I/O 作業。 不論哪一個執行緒建立 I/O 作業,函式只會取消目前進程中的 I/O 作業。

語法

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

參數

hFile [in]

檔案的控制碼。

lpOverlapped [in, optional]

重迭資料結構的指標,其中包含用於非同步 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 應用程式]
標頭
IoAPI.h (包括 Windows.h) ;
Windows Server 2008 R2、Windows 7、Windows Server 2008 和 Windows Vista 上的 WinBase.h (包括 Windows.h)
程式庫
Kernel32.lib
DLL
Kernel32.dll

另請參閱

CancelIo

CancelSynchronousIo

解除擱置的 I/O 作業

檔案管理功能

同步和非同步 I/O