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

Функция KsRemoveIrpFromCancelableQueue всплывает из указанной очереди, которая может быть отменена и удаляет состояние отмены. Функция выполняет поиск списка до тех пор, пока 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 из списка или только что получена функция отмены, чтобы 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 (include Ks.h)
библиотеки Ks.lib

См. также

KsReleaseIrpOnCancelableQueue

KsRemoveSpecificIrpFromCancelableQueue