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 함수도 마찬가지입니다.

스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://jiniya.net/tt/trackback/661
  • 整形

    Tracked from 整形 | 2013/06/09 08:50 | DEL

    괴짜 프로그래머의 일상사~@@ - Windows 2000 디바이스 드라이버 샘플 코드 오류

  • 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| ... 82|83|84|85|86|87|88|89|90| ... 604| NEXT >