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


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

Функция KsMoveIrpsOnCancelableQueue перемещает указанные irP из параметра SourceList в параметр DestinationList в зависимости от значения, возвращаемого функцией KStrIrpListCallback , определяемой мини-driver.

Синтаксис

KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
  [in, out]      PLIST_ENTRY           SourceList,
  [in]           PKSPIN_LOCK           SourceLock,
  [in, out]      PLIST_ENTRY           DestinationList,
  [in, optional] PKSPIN_LOCK           DestinationLock,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in]           PFNKSIRPLISTCALLBACK  ListCallback,
  [in]           PVOID                 Context
);

Параметры

[in, out] SourceList

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

[in] SourceLock

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

[in, out] DestinationList

Указывает голову очереди, в которую нужно добавить irP.

[in, optional] DestinationLock

При необходимости содержит указатель на блокировку спина драйвера для доступа к конечной очереди. Если этот параметр не указан, предполагается, что параметр SourceLock управляет обеими очередями. Если этот параметр указан, эта блокировка всегда получается после параметра SourceLock . Если список назначения имеет отдельную блокировку спина, сначала получается общесистемная отмена спиновой блокировки, чтобы переместить irP и разрешить обновление спиновой блокировки KSQUEUE_SPINLOCK_IRP_STORAGE().

[in] ListLocation

Указывает, следует ли перечислить irP из головной или конечной части исходной очереди. Все перемещаемые поставщики интеграции помещаются на противоположный конец конечной очереди, чтобы сохранить порядок.

[in] ListCallback

Указывает определяемую мини-хранилищем функцию KStrIrpListCallback , чтобы указать, следует ли переместить определенный IRP из SourceList в DestinationList или следует ли завершить перечисление.

[in] Context

Контекст, передаваемый в ListCallback.

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

Возвращает STATUS_SUCCESS, если список был полностью перечислен; В противном случае возвращает любое предупреждение или ошибку, возвращенные функцией обратного вызова KStrIrpListCallback , которая прервала перечисление.

Комментарии

IRP перемещается, если функция KStrIrpListCallback указывает, что она должна быть перемещена, независимо от того, приобретена ли она в данный момент. Если KStrIrpListCallback возвращает STATUS_SUCCESS, IRP перемещается. Если он возвращает STATUS_NO_MATCH, IRP не перемещается. Любое другое возвращаемое предупреждение или значение ошибки завершит перечисление и будет возвращено функцией . KStrIrpListCallback не должен возвращать значение STATUS_NO_MATCH как ошибку. KStrIrpListCallback вызывается в DISPATCH_LEVEL. KStrIrpListCallback всегда вызывается хотя бы один раз в конце со значением NULL IRP для завершения перечисления списка.

KsMoveIrpsOnCancelableQueue продолжает работу по списку, пока функция обратного вызова не укажет, что поиск должен быть завершен или достигнут конец списка. KsMoveIrpsOnCancelableQueue минимизирует использование всей системы отмены спиновой блокировки путем использования предоставленных спиновых блокировок для синхронизации доступа, когда это возможно. KsMoveIrpsOnCancelableQueue не позволяет изменять подпрограмму отмены при перемещении irp.

Функция может вызываться в DISPATCH_LEVEL или ниже.

Требования

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

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

KStrIrpListCallback