다음을 통해 공유


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을 복원합니다. 드라이버가 계열에서 여러 개의 대기 중인 스핀 잠금을 획득하는 경우 원래 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