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