Soft Ware/Windows Driver

익큐티브 스핀 록에 대해서 ~~~

달려가보자 2012. 2. 17. 01:01

익스큐티브 스핀 록은 드라이버에서 가장 많이 사용되는 스핀 록으로서 주로 데이터 구조체를 보호하기
위해 사용된다고 하네요 ^^

익스큐티브 스핀 록은 디스패치 레벨이하에서 실행 되는 스레드만이 획득 가능하구요.

익스큐티브 스핀 록을 사용하기 위해서는 스핀 록 구조체를 위한 변수를 선언 해야 하며

이 변수는 전역 변수나 페이징이 불가능한 Device_Extension 구조체 내에 스핀 록 변수를

선언 해야 합니다 ^^

스핀 록을 획득 하기 위해서 스핀 록 변수를 초기화 해야되는데 초기화 함수로는

KeInitializeSpinLock()함수를 사용
하여 처리하고

사용하기 위해서는 KeAcquireSpinLock() 함수를 호출 합니다 ^^

KeAcquireSpinLock()  이 함수는 IRQL를 조사 하여 스레드의 IRQL를 디스패치 레벨로 상승 시키고

스핀 록을 획득 할때까지 검사와 설정 과정을 수행합니다.


만약 스레드가 디스패치 레벨에서 동작한다는것을 알고 있고 ,

드라이버가 DPC 루틴에서 동작한다는 것을 보장한다면

굳이 디스패치 레벨로 상승 시킬 필요가 없다고 하네요 또한 이 경우에는

KeAcquireSpinLockAtDpcLevel()함수를 사용하여 스핀 록을 획득 할수 있다고 하네요 ^^

위 경우 스핀 록 해제시에는 KeReleaseSpinLockFromDpcLevel() 함수를 사용하구요.

위 경우를 제외한 경우에는 KeReleaseSpinLock() 함수를 사용한다고 하네요 ^^ 

아참 주의 사항으로는 익스큐티브 스핀 록의 최대 레벨은 디스패치 레벨임으로 

인터럽트 서비스 루틴에서는 익스큐티브 스핀 록을 획득 할 수 없습니다 !!!!

만약 인터럽트 서비스 루틴에서 사용시 IRQL_NOT_GREATER_OR_EQUAL 오류가 

발생 됩니다 ^^ㅋㅋㅋ



 




'Soft Ware > Windows Driver' 카테고리의 다른 글

디스패처 오브젝트 !!  (0) 2012.02.18
인스택 큐 스핀 록에 대해서 ~~!!  (0) 2012.02.17
스핀록에 대해서 ~~  (0) 2012.02.17
디바이스 정리  (0) 2011.11.21
윈도우 디바이스 드라이버 & Simple  (0) 2011.11.16