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


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

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

Синтаксис

void KeAcquireInStackQueuedSpinLockAtDpcLevel(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Параметры

SpinLock

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

LockHandle

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

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

None

Remarks

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

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

Для драйвера, работающего на DISPATCH_LEVEL IRQL > , эта подпрограмма получает блокировку без изменения текущего 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