Windows 2000 디바이스 드라이버 샘플 코드 오류 :: 2007/12/02 18:26


제가 가진 몇 안되는 디바이스 드라이버 책 중에 하나가 "Windows 2000 디바이스 드라이버"입니다. 질럿님께서 번역하셔서 더 애착이 가는 책이기도 합니다. ㅋ 물론 설명이 다른 책에 비해서 훨씬 쉬운 것도 한 가지 장점이 아닌가 생각해 봅니다.

각설하고 그 Windows 2000 디바이스 드라이버의 400 페이지를 보면 시스템 스레드를 종료하기 위해서 시스템 스레드를 대기하는 코드가 나옵니다. 코드를 발췌하면 아래와 같습니다.


pDE->pThreadObj는 PETHREAD로 선언된 변수입니다. 별 생각없이 이 코드를 그대로 DriverUnload에 붙였더니 공포의 블루스크린이 마구 뜨더군요. 그런데도 첨에는 왜 뜨는지를 이해하질 못했습니다. 디버그 로그를 보니 단지 스레드가 종료되지 않았다는 것은 알 수 있었습니다. 더 훼이크 스러운건 KeSetEvent나 KeWaitForSingleObjects로 넘어가는 대부분의 인자가 &variable 형태라는 것 입니다. 그래서 더욱 헤맸습니다.

제가 내린 결론는 위 코드가 *아마도* 잘못된 것이 아닐까하는 것입니다. KeWaitForSingleObject의 인자로는 PVOID가 들어갑니다. 커널 오브젝트의 포인터죠. KEVENT라는 커널 이벤트 객체가 있다면 PKEVENT가 인자로 넘어가는 겁니다. 따라서 pDE->pThreadObj는 ETHREAD의 포인터인 PETHREAD로 선언된 변수이기 때문에 굳이 다시 주소 연산자를 사용해서 주소를 넘길 필요가 없습니다. 위 코드에서 &부분을 뺀 다음 테스트를 해보니 정상적으로 동작을 하더군요. ObDereferenceObject 함수도 마찬가지입니다.

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
이올린에 북마크하기(0) 이올린에 추천하기(0)
스폰서
글타래

Trackback Address :: http://www.jiniya.net/tt/trackback/661
  • Gravatar Image.
    키눅스 | 2007/12/03 10:14 | PERMALINK | EDIT/DEL | REPLY

    흠... 레퍼런스 상으로도 잘못된 코드 같긴 합니다만..
    찾아보니 원서에도 동일하게 코드가 작성되어 있네요.
    책의 Errata에도 보고 되어 있지 않구요.(http://www.w2kdriverbook.com/Errata.htm)
    한번 리포팅 해보심이(저는 영어가 .. ^^;)

    언제 기회가 되면 저도 테스트 해봐야 겠네요.
    간만에 이 책을 보게됬네요..
    '역자의 말' 맨 끝에 'kinux' 넣어 달라고 때 썼던게 엊그제 같은데..(자랑?? ㅋㅋ)

    • Gravatar Image.
      codewiz | 2007/12/03 10:28 | PERMALINK | EDIT/DEL

      키눅스님 좋은 정보 감사합니다.
      그런 페이지가 있는지도 몰랐네요. ㅎㅎ^^;;

      저는 예전에 질럿님한테 책달라고 떼썼던게 엊그제 같네요.
      결국 책은 못 받았다는 ㅠㅠ...

  • Gravatar Image.
    drvoss | 2007/12/04 08:30 | PERMALINK | EDIT/DEL | REPLY

    질럿님은 스타2 출시 하시러?? 농담입니다.

    영진님의 지식을 정리해서 xp나 vista가 첨가된 디바이스 드라이버 책 하나만 써주세요.

    디바이스쪽에 마땅하게 읽을 책이 두권밖에 없고, 오래되어서 영진님의 등단이 절실할 때 입니다.

    • Gravatar Image.
      codewiz | 2007/12/04 12:03 | PERMALINK | EDIT/DEL

      질럿님은 요즘 신혼의 단꿈을 이루시느라 잠적하신것 같아요. ^^;;
      제가 책쓰면 아마 칼맞지 않을까요?
      질럿님이나 키눅스님한테 떼 쓰는게 빠를거 같아요. ㅋㅋ

Name
Password

Homepage
Secret
< PREV | 1| ... 21|22|23|24|25|26|27|28|29| ... 548| NEXT >