Soft Ware/Windows Driver

디스패처 오브젝트 중 이벤트 오브젝트

달려가보자 2012. 2. 18. 21:03

앞절에서 말한 디스패처 오브젝트 중에는 이벤트 , 뮤텍스, 세마포어 등이 있습니다 .

우선 이벤트 오브젝트 부터 알아 볼건데요 ㅎㅎ

이벤트 오브젝트는 여러 스레드들 사이에서 코드 실행의 동기화를 위해 사용되는데요

이게 무슨말이냐면요 예를 들어보겠습니다

스레는 A는 드라이버에서 사용할 데이터를 생성하고 그 데이터를 현재 사용하고 있습니다 .

스레드 B는 스레드 A가 사용중인 데이터를 사용하기 위해 데이터를 사용할수 있을때를

기달리는데요 스레드 A가 데이터의 사용을 끝났을때 이벤트 오브젝트를 사용하여 스레드 B에

데이터를 사용할수 있도록 알려준다고 하네요 ^^

이벤트 오브젝트는 통지 이벤트 오브젝트 와 동기화 이벤트 오브젝트가 있는데요

1. 통지 이벤트 오브젝트는 자동으로 Non-Signaled 상태로 다시 설정 되지 않는데요

Non - Signaled 로 초기화 해주기 위해서는 KeResetEvent() 함수를 호출 해야 합니다.

통지 이벤트 오브젝트는 하위 드라이버로부터 이벤트가 Signaled 되기를 기다릴때 사용합니다.

2. 동기화 이벤트 오브젝트는 자동으로 초기화를 해주는데요 이벤트 오브젝트가 Signaled 될때 이벤트

를 기다리고 있는 하나의 스레드만이 실행을 위해 스케줄링 된다고 하네요 ㅎㅎ

동기화 이벤트 오브젝트는 하드웨어 초기화 루틴에서 하드웨어 인터럽트가 Signaled 되기를 기다리고

있는 드라이버에서 자주 사용한다고 하네요 ^^

더 자세히 설명 드리자면 완료 루틴을 설정 한후 IRP에 대한 처리가 완료 되었을때 추가적인 작업을

수행하도록 완료 루틴에서 KeSetEvent() 함수를 호출하여 대기 상태에 있는 스레드에 나머지 작업을

처리 하도록 허락한다고 하네요 ^^