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