다음을 통해 공유


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참조하세요.

드라이버는 동일한 스핀 잠금에서 KeAcquireSpinLockKeAcquireInStackQueuedSpinLock 호출을 결합해서는 안됩니다. 스핀 잠금은 항상 대기 중인 스핀 잠금 또는 일반 스핀 잠금으로 획득하거나 해제해야 합니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows XP
헤더 wdm.h
IRQL IRQL >= DISPATCH_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport)

참고 항목

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

keInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel