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