Функция 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 для использования подпрограммой отмены, если это необходимо.

[in] Irp

Указывает IRP для добавления в очередь, указанную в QueueHead.

[in] ListLocation

Указывает, следует ли размещать этот IRP в начале или конце очереди. Это значение должно быть KsListEntryTail или KsListEntryHead.

[in, optional] DriverCancel

Необязательный параметр, указывающий используемую драйвером подпрограмму отмены. Если значение равно NULL, используется стандарт KsCancelRoutine .

Возвращаемое значение

None

Remarks

Если функция IRP была переведена в состояние отмены при вызове этой подпрограммы, KsAddIrpToCancelableQueue немедленно вызовет подпрограмму отмены, указанную в DriverCancel, или если в DriverCancel не указана подпрограмма отмены потоковой передачи по умолчанию.

Функция KsAddIrpToCancelableQueue позволяет отменять irP даже до их включения в список отмены или при перемещении из одного списка в другой. Эта функция может вызываться на уровне IRQ DISPATCH_LEVEL или ниже, если только очередь, выделенная драйвером, и все записи в очереди не являются резидентами системы или не выделены из постоянного хранилища.

Функция не использует блокировку отмены спина для добавления элементов в список. Доступ к списку синхронизируется с помощью предоставленной блокировки спина и зависит от атомарных операций в Irp-CancelRoutine>.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ks.h (включая Ks.h)
Библиотека Ks.lib