Функция KeAcquireInStackQueuedSpinLock (wdm.h)

Подпрограмма KeAcquireInStackQueuedSpinLock получает очередь блокировки очереди.

Синтаксис

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Параметры

SpinLock

[вход, выход] Указывает блокировку спина для получения. Этот параметр должен быть инициализирован с помощью KeInitializeSpinLock.

LockHandle

[out] Указатель на предоставленную вызывающим KLOCK_QUEUE_HANDLE переменную, которую подпрограмма может использовать для возврата дескриптора очереди спин-блокировки. Вызывающий объект передает это значение в KeReleaseInStackQueuedSpinLock при освобождении блокировки. Как правило, драйверы должны выделять структуру в стеке каждый раз, когда они получают блокировку. Драйвер не должен использовать один и тот же KLOCK_QUEUE_HANDLE с нескольких вызывающих сайтов.

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

None

Remarks

KeAcquireInStackQueuedSpinLock получает спиновую блокировку в виде очереди. Дополнительные сведения см. в разделе Очереди спиновых блокировок. Вызывающий объект освобождает спин-блокировку, вызывая подпрограмму KeReleaseInStackQueuedSpinLock .

Как и обычные спин-блокировки, очереди спин-блокировки должны использоваться только в особых обстоятельствах. Описание использования спин-блокировок см. в разделе KeAcquireSpinLock.

Эта процедура повышает уровень IRQL до DISPATCH_LEVEL при получении спин-блокировки. Если вызывающий объект гарантированно уже работает в DISPATCH_LEVEL, эффективнее вызвать KeAcquireInStackQueuedSpinLockAtDpcLevel.

Вызов KeReleaseInStackQueuedSpinLock , который освобождает спиновую блокировку, должен происходить в IRQL = DISPATCH_LEVEL. Этот вызов восстанавливает исходный IRQL, сохраненный операционной системой в начале вызова KeAcquireInStackQueuedSpinLock .

Драйверы не должны сочетать вызовы KeAcquireSpinLock и KeAcquireInStackQueuedSpinLock в одной и той же спин-блокировке. Спин-блокировка всегда должна быть получена или освобождена в виде очереди или как обычная спиновая блокировка.

Требования

Требование Значение
Заголовок wdm.h (включая Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

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

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock