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