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


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

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

Синтаксис

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

Указывает голову очереди, из которой необходимо удалить irPs.

[in] SourceLock

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

[in, out] DestinationList

Указывает голову очереди, в которой необходимо добавить irPs.

[in, optional] DestinationLock

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

[in] ListLocation

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

[in] ListCallback

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

[in] Context

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

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

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

Замечания

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ks.h (include Ks.h)
библиотеки Ks.lib

См. также

KStrIrpListCallback