디스패처 오브젝트의 기본적인 속성은 Signaled 와 Non-Signaled 상태 중 하나를 가진다
Signaled 상태는 디스패처 오브젝트가 보호 하고 있는 데이터를 사용하는 스레드가 하나도 없으며
코드 의 임계 영역에 있는 디른 스레드 역시 하나도 없는 상태를 말한다.
Non - Signaled 상태는 디스패처 오브젝트가 보호 하고 있는 데이터를 사용하고 , 코드 임계 영역에서
실행되고 있는 스레드가 있다는것을 말한다.
또한 드라이버는 디스패처 오브젝트를 사용하기 위해서는 페이징이 불가능한 영역에 오브젝트 변수를
선언해야 한다고 하네요 ㅎㅎ
하나의 스레드가 공유된 데이터를 사용할 필요가 있다면 KeWaitforSingleObject() 함수 와
KeWaitForMultipleObject(), KeWaitForMutexObject() 와 같은 대기 함수를 사용하여
디스패처 오브젝트가 Signaled 상태가 될때 까지 기다린다.
여기서 주의사항은 스레드에 제어를 넘겨주기전에 대기 상태에 있는 오브젝트의 상태를
Non - Signaled 로 변경해야 된다 .
데이터를 다 사용해서 반납할 경우에는 KeReleaseMutex(), KeSetEvent() 와 같은 함수를
호출 하여 디스패처 오브젝트의 상태를 Non - Signaled로 변경해야 된다 .
※ 여기서 임의의 스레드 컨텍스트에서 실행되는 드라이버 디스패처 함수들은 디스패처 오브젝트가
Signaled 될때까지 기다리지 않는다 라는 점을 유의 해야 한다 !!!..
'Soft Ware > Windows Driver' 카테고리의 다른 글
디스패처 오브젝트 중 뮤텍스 오브젝트 (0) | 2012.02.19 |
---|---|
디스패처 오브젝트 중 이벤트 오브젝트 (0) | 2012.02.18 |
인스택 큐 스핀 록에 대해서 ~~!! (0) | 2012.02.17 |
익큐티브 스핀 록에 대해서 ~~~ (0) | 2012.02.17 |
스핀록에 대해서 ~~ (0) | 2012.02.17 |