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에 사용되는 데이터를 포함하는 OVERLAPPED 데이터 구조체에 대한 포인터입니다.
이 매개 변수가 NULL이면 hFile 매개 변수에 대한 모든 I/O 요청이 취소됩니다.
이 매개 변수가 NULL이 아니면 지정된 lpOverlapped 겹치는 구조체가 있는 파일에 대해 발급된 특정 I/O 요청만 취소된 것으로 표시됩니다. 즉, CancelIo 함수가 파일 핸들에서 처리 중인 요청을 모두 취소하는 동안 하나 이상의 요청을 취소할 수 있습니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다. 지정된 파일 핸들에 대해 호출 프로세스에서 발급한 보류 중인 모든 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 함수는 관련 오류 코드를 반환합니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | Yes |
SMB 3.0 TFO(투명 장애 조치(failover)) | Yes |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | Yes |
CsvFS(클러스터 공유 볼륨 파일 시스템) | Yes |
ReFS(Resilient File System) | Yes |
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | ioapiset.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |