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


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

Если драйвер устройства имеет подпрограмму StartIo , его подпрограммы диспетчеризации могут зарегистрировать подпрограмму Отмена , указав ее адрес в качестве входных данных в IoStartPacket.

Если у драйвера нет процедуры StartIo , его диспетчеризация должна выполнять следующие действия перед постановкой IRP в очередь для дальнейшей обработки другими подпрограммами драйвера:

  1. Вызовите IoAcquireCancelSpinLock.

  2. Вызовите IoSetCancelRoutine с входным IRP и точкой входа для предоставленной драйвером процедуры Cancel .

  3. Вызовите IoReleaseCancelSpinLock.

Сведения об отмене спиновой блокировки см. в разделе Использование системной отмены спин-блокировки.

Драйверам, которые управляют собственными очередями irP, вместо использования очереди устройств, предоставленной диспетчером ввода-вывода, при вызове IoSetCancelRoutine не требуется получать блокировку отмены вращения. Тем не менее эти драйверы должны проверка указатель на подпрограмму Отмена, который возвращает IoSetCancelRoutine, чтобы определить, запущена ли подпрограмма Отмена.