익스큐티브 스핀 록은 드라이버에서 가장 많이 사용되는 스핀 록으로서 주로 데이터 구조체를 보호하기
위해 사용된다고 하네요 ^^
익스큐티브 스핀 록은 디스패치 레벨이하에서 실행 되는 스레드만이 획득 가능하구요.
익스큐티브 스핀 록을 사용하기 위해서는 스핀 록 구조체를 위한 변수를 선언 해야 하며
이 변수는 전역 변수나 페이징이 불가능한 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 |