다음을 통해 공유


KeAcquireInStackQueuedSpinLockAtDpcLevel 함수(wdm.h)

호출자가 IRQL >= DISPATCH_LEVEL 이미 실행 중일 때 KeAcquireInStackQueuedSpinLockAtDpcLevel 루틴은 대기 중인 스핀 잠금을 획득합니다.

구문

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