Функция KsAddIrpToCancelableQueue (ks.h)
Функция KsAddIrpToCancelableQueue добавляет IRP в очередь отменяемых IRP, что позволяет отменить IRP. Если ранее для IRP задано состояние отмены, функция KsAddIrpToCancelableQueue завершает отмену этого IRP.
Синтаксис
KSDDKAPI VOID KsAddIrpToCancelableQueue(
[in, out] PLIST_ENTRY QueueHead,
[in] PKSPIN_LOCK SpinLock,
[in] PIRP Irp,
[in] KSLIST_ENTRY_LOCATION ListLocation,
[in, optional] PDRIVER_CANCEL DriverCancel
);
Параметры
[in, out] QueueHead
Указывает хранилище, выделенное драйвером для головы очереди, в которой необходимо добавить IRP.
[in] SpinLock
Указывает на блокировку спина драйвера для доступа к очереди, указанной в QueueHead. Копия этого указателя хранится в KSQUEUE_SPINLOCK_IRP_STORAGE (Irp) IRP для использования подпрограммой отмены при необходимости.
[in] Irp
Указывает IRP для добавления в очередь, указанную в QueueHead.
[in] ListLocation
Указывает, должен ли этот IRP размещаться в начале или конце очереди. Это значение должно быть KsListEntryTail или KsListEntryHead.
[in, optional] DriverCancel
Необязательный параметр, указывающий используемую драйвером подпрограмму отмены. Если это null, используется стандартная KsCancelRoutine.
Возвращаемое значение
Никакой
Замечания
Если IRP был помещен в состояние отмены при вызове этой подпрограммы, KsAddIrpToCancelableQueue немедленно вызовет подпрограмму отмены, указанную в DriverCancel, или если подпрограмма не указана в DriverCancel подпрограмма потоковой передачи по умолчанию вызывается.
Функция KsAddIrpToCancelableQueue позволяет отменять irPs даже до размещения в списке отмен или при перемещении из одного списка в другой. Эту функцию можно вызывать на уровне IRQ DISPATCH_LEVEL или ниже, если только не выделенная драйвером очередь и все записи в очереди являются системными или выделены из локального хранилища.
Функция не использует блокировку отмены спина для добавления элементов в список. Доступ к списку синхронизируется с помощью предоставленной блокировки спина и использует атомарные операции с Irp->CancelRoutine.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ks.h (include Ks.h) |
библиотеки | Ks.lib |