티스토리 뷰

반응형

 

호출 KeAcquireSpinLock을 하거나 KeAcquireInStackQueuedSpinLock는 에 대응하는 통화까지 DISPATCH_LEVEL 현재 프로세서의 IRQL 설정 KeReleaseSpinLock 또는 KeReleaseInStackQueuedSpinLock 것은 이전 IRQL을 복원한다. 따라서 드라이버는 KeAcquireSpinLock 또는 KeAcquireInStackQueuedSpinLock 을 호출 할 때 IRQL <= DISPATCH_LEVEL에서 실행 중이어야합니다 .

KeAcquireSpinLockAtDpcLevel , KeAcquireInStackQueuedSpinLockAtDpcLevel , KeReleaseInStackQueuedSpinLockFromDpcLevel  KeReleaseSpinLockFromDpcLevel의 호출자 는 이미 IRQL = DISPATCH_LEVEL에서 실행 중이기 때문에 더 빨리 실행되므로 이러한 지원 루틴은 현재 프로세서에서 IRQL을 재설정 할 필요가 없습니다. 따라서 대부분의 Windows 플랫폼 에서는 DISPATCH_LEVEL 미만의 IRQL에서 실행하는 동안 KeAcquireSpinLockAtDpcLevel 또는 KeAcquireInStackQueuedSpinLockAtDpcLevel 을 호출하는 것은 치명적인 오류입니다 . KeReleaseSpinLockFromDpcLevel 을 호출 하여 KeAcquireSpinLock 으로 획득 한 스핀 잠금을 해제하면 오류가 발생합니다. 발신자의 원래 IRQL이 복원되지 않기 때문입니다.

ExInterlocked Xxx 와 같은 이그제큐티브 스핀 잠금을 유지하는 루틴은 일반적으로 스핀 잠금을 해제하고 호출자에게 제어를 반환 할 때까지 IRQL = DISPATCH_LEVEL에서 실행됩니다. 그러나 운전자에게는 가능합니다인터럽트 서비스 일상적인 SynchCritSection루틴에 전달 된 스핀 잠금이 ISR 및 SynchCritSection 루틴에의해 독점적으로 사용되는한 ExInterlocked Xxx List 루틴과 같은 특정 ExInterlocked Xxx 루틴 을 호출하는 루틴 (DIRQL에서 실행) .

인터럽트 스핀 잠금을 보유한 각 루틴은 연관된 인터럽트 오브젝트 세트의 DIRQL에서 실행됩니다. 따라서 드라이버는 KeAcquireSpinLock  KeReleaseSpinLock 또는 ISR 또는 SynchCritSection 루틴 에서 Executive 스핀 잠금을 사용하는 다른 루틴을 호출해서는 안됩니다 . 이러한 호출은 시스템 교착 상태를 유발하여 사용자가 시스템을 재부팅해야하는 오류입니다. 드라이버의 ISR 또는 SynchCritSection 루틴이 ExInterlocked Xxx List 루틴을 호출 하면 드라이버는 Ke Xxx SpinLock 을 호출 할 때 ExInterlocked Xxx List 루틴에 전달 된 스핀 잠금을 재사용 할 수 없습니다.또는 Ke Xxx SpinLock Xxx DpcLevel 지원 루틴.

드라이버에 다중 벡터 ISR 또는 둘 이상의 ISR이있는 경우 해당 루틴은 IRQL 에서 연결된 인터럽트 객체가 연결될 때 지정된 SynchronizeIrql  까지 실행하는 동안 KeSynchronizeExecution  호출 할 수 있습니다 .

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함