Media Log

[WDK]에 해당되는 글 1

  1. h PAGED_CODE 매크로 (6) 2011.02.27

PAGED_CODE 매크로

2011. 2. 27. 19:09 | Programming

포스팅 이전

http://localhost:3000/essay/2011/02/27/PAGED_CODE-%EB%A7%A4%ED%81%AC%EB%A1%9C.html

'Programming' 카테고리의 다른 글

_countof 매크로  (0) 2011.03.15
FIELD_OFFSET 매크로  (1) 2011.03.01
PAGED_CODE 매크로  (6) 2011.02.27
디렉터리의 읽기 전용 속성  (4) 2011.02.20
알쏭달쏭한 typedef  (9) 2011.01.04
하위 디렉터리의 파일이 변경 되었는지 감지하는 법  (6) 2010.12.20
  1. 오곡 at 2013.07.09 17:40 [edit/del]

    잘배우고 갑니다~!

    Reply
  2. 없다캐라 at 2014.02.11 17:50 [edit/del]

    저두 잘 배우고 갑니다. prama alloc 관련 검색을 해서 알게되어 왔는데 다른 글보다 이해하기 쉬웠습니다.

    Reply
  3. Favicon of http://minosori.tistory.com BlogIcon minosori at 2014.12.05 14:53 신고 [edit/del]

    안녕하세요,
    좋은 글 잘 읽고 있습니다. 감사합니당~
    그런데, 이해가 안돼서 질문드려요;;
    PAGED_CODE() 매크로를 써서 IRQL이 DISPATCH_LEVEL 이상이면 해당 코드가 페이지되어있든 안되어있든, 그리고 페이징 가능한 코드로 만들어져 있든 말든 무조건 크래시를 발생시키잖아요?(이것도 블루스크린으로 뜨나요?)
    그럼 메모리 절약을 위해서 해당 함수를 페이징 가능한 코드로 만들었다고 했을 때, 크래시가 일어나지 않고 다시 메모리로 로드 되도록 하려면 어떻게 해야하나요?
    현재, Driver Unload때만 섹션을 PAGE로 할당하고 나머지는 디폴트로(모두 Non Paged Area에 들어가게 되죠?) 만들고 돌려보니, NON_PAGED_AREA에서 PAGING됐다고 블루스크린이 뜹니다...ㅜ_ㅡ
    설마, 헤더파일과 소스파일을 여러개로 나눠서 작업하는거랑 관련이 있나요? 디바이스 드라이버는 전혀 생각지도 못한 부분에서 문제가 터지는 경우가 많아서 혹시나 싶어서 여쭤봅니다...;

    Reply
    • Favicon of https://www.benjaminlog.com BlogIcon 김재호 at 2014.12.05 15:37 신고 [edit/del]

      PAGED_CODE() 매크로를 써서 IRQL이 DISPATCH_LEVEL 이상이면 해당 코드가 페이지되어있든 안되어있든, 그리고 페이징 가능한 코드로 만들어져 있든 말든 무조건 크래시를 발생시키잖아요?(이것도 블루스크린으로 뜨나요?)

      -> 네 블루스크린이 발생합니다.

      그럼 메모리 절약을 위해서 해당 함수를 페이징 가능한 코드로 만들었다고 했을 때, 크래시가 일어나지 않고 다시 메모리로 로드 되도록 하려면 어떻게 해야하나요?

      질문을 잘 이해하지 못하겠지만, 원글에 써있는대로 함수를 페이징 가능한 코드로 만들었다면 해당 함수가 IRQL 이 디스패치 레벨보다 낮을 때만 불려야 합니다.
      pagefault in non paged area 라는 에러는 드라이버를 작성하면서 가장 흔히 볼수있는 오류이며, 위 규칙만 잘 지켰다고 해결되는 것은 아닐 껍니다. 동적으로 할당하는 메모리들을 페이지드 풀에 할당했는지도 다 꼼꼼하게 살펴봐야하는데, dump파일을 windbg 로 잘 분석해보시면 어디가 문제인지 찾으실 수 있을 겁니다.

    • Favicon of http://minosori.tistory.com BlogIcon minosori at 2014.12.05 16:54 신고 [edit/del]

      동적 메모리 할당할 때는 분명 NonPagedPool로 할당했는데... 아직 원인을 알 수 없네요. 메모리 할당부분을 주석처리 했더니 크래시가 나지 않는걸 보니 분명 메모리 할당부분에 문제가 있는것 같긴 한데, 아직 초보라 분석하려면 오래 걸릴것 같네요;;
      아무튼 답변 감사합니다. :)

  4. 고현정 at 2021.03.31 21:55 [edit/del]

    와 정말 너무 도움되는 글이었습니다.
    진짜 너무너무 감사드립니다.!!!
    드라이버 관련 글 하나씩 다 읽어볼거에요! 너무 유익합니다.ㅎㅎ

    Reply

submit