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


Функция 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