12 Jul
2009
Posted in: 코드
By    7 Comments

DriverEntry는 직렬화가 될까?


DriverEntry는 직렬화가 될까?
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net

DllMain은 로더 락에 의해서 실행이 직렬화 됩니다. 즉, 서로 다른 두 Dll의 DllMain 루틴이 동시에 호출되는 일은 없습니다. 해당 사실이 드라이버에도 동일하게 적용됩니다. DriverEntry 루틴은 워크 아이템(Work Item)에 의해서 호출됩니다. 워크 아이템은 실질적으로는 단일 시스템 스레드가 FCFS(first come, first service) 방식으로 작업들을 순차적으로 처리해 주는 구조이기 때문에 직렬화가 자동적으로 이루어 집니다.

즉, 한 드라이버가 DriverEntry에서 무한 펜딩을 시키면 다른 드라이버는 로딩될 수 없습니다. 물론 다른 워크 아이템도 수행될 수 없겠죠.




  • 트랙백 주소: http://www.jiniya.net/wp/archives/224/trackback

관련 글

7 Comments

  • 나쁜일에 쓰일수있는 포스팅이네요 ㅋ 절제한듯한 느낌의 포스팅…
    후덜덜입니다 ㅠ_-;

  • // rodream: 길게 쓰기 힘들어서 짧게 쓴 거라능… ㅎㅎ^^;; 요새는 한 줄 쓰기도 왤케 힘든지 모르겠네용… 아웅…

  • USB 마우스를 꽂고 드라이버가 안올라와서 마우스가 안 움직이는 경험을 해 보면 이해가 빨리 될 듯. 보통 이런 경우는 다른 알 수 없는 장치 드라이버들이 장치관리자 유저 인터페이스에 의해 홀드 되어 있는 경우. 이 유저 인터페이스에 다음 버튼을 눌러주고 난뒤 그다음 USB 마우스가 올라오게 되죠…

  • 난 한국말 잘 모르네요.
    이럴때 우리 네티가 뭐라고 해보던지.
    로더락 아직 넓게 쓰이는지…
    떠돌이 — yolanda

  • 드라이버가 워크아이템으로 로딩되는건 예전부터 알고있었는데..
    드라이버나 워크 아이템을 바보로 만드는 상황이 발생할 수도 있겠네요.
    재밌는 글 잘 보고 갑니다. ^^

    ps. 블로그 주소 바뀐거 오늘 알았네요.. ㅎㅎ

  • somma // somma님 안녕하세욤. 블로그 모르셨던 분이 제법 계셨나 보네용… ㅠㅠ~

  • 헛… 예전에 USB 포트 하나가 맛가서 키보드가 제대로 인식 안되는 문제 때문에 다른 USB 장치들이 한참 뒤에 로딩되는 문제가 있었는데 이거였군요. @0@)-b
    좋은 글 잘보고 갑니다. ㅎㅎ

    정말 악용할 수도 있을 것 같네요. ㅎㄷㄷ

댓글을 달아주세요. 악플보다 무서운게 무플입니다 ㅋ~