Поделиться через


Отмена IRP

Драйверы, в которых irP могут оставаться в очереди в течение неопределенного интервала (чтобы пользователь мог отменить ранее отправленный запрос ввода-вывода), должны иметь одну или несколько процедур отмены для выполнения отмененных пользователем запросов ввода-вывода. Например, драйверы клавиатуры, мыши, параллельных, последовательных и звуковых устройств (или драйверы, наложенные на них) и драйверы файловой системы должны иметь подпрограммы Отмены .

Драйверы для Microsoft Windows XP и более поздних версий могут использовать очереди IRP с безопасной отменой , а не реализовывать собственные процедуры отмены .

"Отменить IRP" означает как можно быстрее завершить IRP, сохраняя целостность системы. Общие сведения о завершении IRP см. в разделе Завершение irP.

Процесс отмены начинается, когда система или драйвер вызывает IoCancelIrp. Эта подпрограмма вызывается для каждого IRP, связанного с потоком, который еще не полностью завершен. Система отменяет необработанные IRP, если поток, инициирующий запрос ввода-вывода, завершает работу. Драйверы могут отменять только созданные ими irP (см. статью Создание irPs для Lower-Level Drivers).)

Если отмененное IRP не завершено в течение 5 минут, диспетчер операций ввода-вывода считает, что время ожидания IRP истекло. Такие irP не связаны с потоком, и регистрируется ошибка для устройства, которому в настоящее время принадлежит IRP. Убедитесь, что все запросы, которые могут занять много времени в драйвере, будут отменены. Чтобы гарантировать возможность отмены потенциально длинных запросов, можно использовать безопасные для отмены очереди IRP или платформу драйвера в режиме ядра, которая абстрагирует отмену от разработчика драйвера.

В этом разделе содержатся следующие разделы:

Общие сведения об отмене подпрограмм

Регистрация процедуры отмены

Синхронизация отмены IRP

Реализация процедуры отмены

Моменты, которые следует учитывать при отмене IRP