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