KeAcquireInStackQueuedSpinLock 함수(wdm.h)

KeAcquireInStackQueuedSpinLock 루틴은 대기된 스핀 잠금을 획득합니다.

구문

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

매개 변수

SpinLock

[in, out] 획득할 스핀 잠금을 지정합니다. 이 매개 변수는 KeInitializeSpinLock을 사용하여 초기화되어야 합니다.

LockHandle

[out] 루틴이 스핀 잠금 큐 핸들을 반환하는 데 사용할 수 있는 호출자 제공 KLOCK_QUEUE_HANDLE 변수에 대한 포인터입니다. 호출자는 잠금을 해제할 때 이 값을 KeReleaseInStackQueuedSpinLock 에 전달합니다. 드라이버는 일반적으로 잠금을 획득할 때마다 스택에 구조를 할당해야 합니다. 드라이버는 여러 통화 사이트에서 동일한 KLOCK_QUEUE_HANDLE 사용하면 안 됩니다.

반환 값

없음

설명

KeAcquireInStackQueuedSpinLock 은 대기된 스핀 잠금으로 스핀 잠금을 획득합니다. 자세한 내용은 큐에 대기된 스핀 잠금을 참조하세요. 호출자는 KeReleaseInStackQueuedSpinLock 루틴을 호출하여 스핀 잠금을 해제합니다.

일반 스핀 잠금과 마찬가지로 대기 중인 스핀 잠금은 매우 특별한 상황에서만 사용해야 합니다. 스핀 잠금을 사용하는 시기에 대한 설명은 KeAcquireSpinLock을 참조하세요.

이 루틴은 스핀 잠금을 획득할 때 IRQL 수준을 DISPATCH_LEVEL 높입니다. 호출자가 이미 DISPATCH_LEVEL 실행되고 있는 경우 KeAcquireInStackQueuedSpinLockAtDpcLevel을 호출하는 것이 더 효율적입니다.

스핀 잠금을 해제하는 KeReleaseInStackQueuedSpinLock 에 대한 호출은 IRQL = DISPATCH_LEVEL 발생해야 합니다. 이 호출은 KeAcquireInStackQueuedSpinLock 호출의 시작 부분에 운영 체제가 저장한 원래 IRQL을 복원합니다.

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

요구 사항

요구 사항
헤더 wdm.h(Wdm.h 포함)
IRQL IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

추가 정보

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock