Функция KsRemoveIrpFromCancelableQueue (ks.h)

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

Синтаксис

KSDDKAPI PIRP KsRemoveIrpFromCancelableQueue(
  [in, out] PLIST_ENTRY             QueueHead,
  [in]      PKSPIN_LOCK             SpinLock,
  [in]      KSLIST_ENTRY_LOCATION   ListLocation,
  [in]      KSIRP_REMOVAL_OPERATION RemovalOperation
);

Параметры

[in, out] QueueHead

Указывает на заголовок очереди, из которой следует удалить IRP.

[in] SpinLock

Указывает на спин-блокировку драйвера для доступа к очереди.

[in] ListLocation

Указывает, должен ли этот IRP поступать из начала или конца очереди.

[in] RemovalOperation

Указывает, удаляется ли IRP из списка или только что получена путем установки функции cancel значения NULL. Если он только получен, IRP должен быть позже выпущен с KsReleaseIrpOnCancelableQueue или полностью удален с помощью KsRemoveSpecificIrpFromCancelableQueue.

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

Функция KsRemoveIrpFromCancelableQueue возвращает следующий необязаченный IRP в списке или возвращает значение NULL , если ни один из них не найден, или если не удалось найти IRP, который еще не был получен.

Комментарии

Эти перечисления используются в предыдущих параметрах для управления тем, откуда и как удаляется IRP.

typedef enum {
    KsListEntryTail,
    KsListEntryHead
} KSLIST_ENTRY_LOCATION;

typedef enum {
    KsAcquireOnly,
    KsAcquireAndRemove
} KSIRP_REMOVAL_OPERATION;

Требования

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

См. также раздел

KsReleaseIrpOnCancelableQueue

KsRemoveSpecificIrpFromCancelableQueue