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


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

Подпрограмма KeAcquireInStackQueuedSpinLockAtDpcLevel получает блокировку спина в очереди, когда вызывающий объект уже работает в IRQL >= DISPATCH_LEVEL.

Синтаксис

void KeAcquireInStackQueuedSpinLockAtDpcLevel(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Параметры

SpinLock

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

LockHandle

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

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

Никакой

Замечания

Для драйвера, работающего в IRQL >= DISPATCH_LEVEL, KeAcquireInStackQueuedSpinLockAtDpcLevel получает блокировку спина в качестве очередиспина. Дополнительные сведения см. в очередных блокировок спина. Чтобы освободить блокировку спина, вызовите процедуру KeReleaseInStackQueuedSpinLockFromDpcLevel.

Драйверы, которые уже работают на >IRQL = DISPATCH_LEVEL могут вызывать эту подпрограмму, чтобы быстрее получить очередь спин-блокировки. В противном случае используйте процедуру KeAcquireInStackQueuedSpinLock для получения блокировки спина.

Для драйвера, работающего в IRQL > DISPATCH_LEVEL, эта подпрограмма получает блокировку без изменения текущего IRQL. Для драйвера, работающего в IRQL = DISPATCH_LEVEL, эта подпрограмма повышает производительность, получив блокировку без первого задания IRQL для DISPATCH_LEVEL, которая, в данном случае, будет избыточной операцией.

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP
заголовка wdm.h
IRQL IRQL >= DISPATCH_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport)

См. также

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel