Функция NtCancelIoFileEx
Помечает все невыполненные операции ввода-вывода для указанного дескриптора файла. Функция отменяет операции ввода-вывода только в текущем процессе, независимо от того, какой поток создал операцию ввода-вывода.
Примечание
Эта функция является пользовательским режимом, эквивалентным функции Win32 CancelIoEX .
Синтаксис
BOOL WINAPI NtCancelIoFileEx(
_In_ HANDLE hFile,
_In_opt_ LPOVERLAPPED lpOverlapped
);
Параметры
hFile [in]
Дескриптор файла.
lpOverlapped [in, необязательно]
Указатель на структуру данных OVERLAPPED , содержащую данные, используемые для асинхронного ввода-вывода.
Если этот параметр имеет значение NULL, все запросы ввода-вывода для параметра hFile отменяются.
Если этот параметр не имеет значение NULL, то только те конкретные запросы ввода-вывода, которые были выданы для файла с указанной перекрывающейся структурой lpOverlapped , помечаются как отмененные, что означает, что вы можете отменить один или несколько запросов, а функция NtCancelIoFile отменяет все невыполненные запросы на дескриптор файла.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение. Операция отмены для всех ожидающих операций ввода-вывода, выданных вызывающим процессом для указанного дескриптора файла, была успешно запрошена. Приложение не должно освобождать или повторно использовать структуру OVERLAPPED , связанную с отмененными операциями ввода-вывода, пока они не будут завершены. Поток может использовать функцию GetOverlappedResult для определения завершения самих операций ввода-вывода.
Если функция завершается сбоем, возвращаемое значение равно 0 (ноль). Чтобы получить расширенные сведения об ошибке, вызовите функцию GetLastError .
Если этой функции не удается найти запрос для отмены, возвращается значение 0 (ноль), а GetLastError возвращает ERROR_NOT_FOUND.
Комментарии
Функция NTCancelIoFileEx позволяет отменять запросы в потоках, отличных от вызывающего потока. Функция NtCancelIoFile отменяет только запросы в том же потоке, который вызвал функцию NtCancelIoFile . NtCancelIoFileEx отменяет только невыполненные операции ввода-вывода на дескрипторе, не изменяя состояние дескриптора; это означает, что нельзя полагаться на состояние дескриптора, так как вы не можете знать, была ли операция успешно завершена или отменена.
Если для указанного дескриптора файла выполняются какие-либо ожидающие операции ввода-вывода, функция NtCancelIoFileEx помечает их для отмены. Большинство типов операций можно отменить немедленно; другие операции могут продолжаться до завершения, прежде чем они будут фактически отменены и вызывающий объект будет уведомлен. Функция NtCancelIoFileEx не ожидает завершения всех отмененных операций.
Если дескриптор файла связан с портом завершения, пакет завершения ввода-вывода не помещается в очередь на порт, если синхронная операция успешно отменена. Для асинхронных операций, все еще ожидающих, операция отмены будет ставить пакет завершения ввода-вывода в очередь.
Отменяемая операция завершается с одним из трех состояний; Чтобы определить состояние завершения, необходимо проверка состояние завершения. Ниже перечислены три состояния:
- Операция выполнена в обычном режиме. Это может произойти, даже если операция была отменена, так как запрос на отмену, возможно, не был отправлен вовремя для отмены операции.
- Операция была отменена. Функция GetLastError возвращает ERROR_OPERATION_ABORTED.
- Операция завершилась сбоем с другой ошибкой. Функция GetLastError возвращает соответствующий код ошибки.
В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.
Технология | Поддерживается |
---|---|
Протокол SMB 3.0 |
Да |
Прозрачная отработка отказа (TFO) SMB 3.0 |
Да |
SMB 3.0 с масштабируемыми общими папками (SO) |
Да |
Файловая система общего тома кластера (CSVFS) |
Да |
Восстанавливаемая файловая система (ReFS) |
Да |
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|