2017년 2월 13일 월요일

FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO

delete 미니필터 샘플 을 보면 아래와 같이 IRP_MJ_SET_INFORMATION 콜백 핸들러를 등록할때 FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO 를 사용하는 것을 확인할 수 있다.

    CONST FLT_OPERATION_REGISTRATION Callbacks[] = {
        ...
        { IRP_MJ_SET_INFORMATION,
        FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO,
        DfPreSetInfoCallback,
        DfPostSetInfoCallback },
        ...
        { IRP_MJ_OPERATION_END }
    };
이유가 궁금해서 검색을 해보니 관련된 질문과 답이 있었다.
내용을 정리해두자면, On demand paging 을 구현하기 위해 VMM(Virtual Memory Manager)이 생성한 IRP 기반의 I/O 요청이 Paging I/O 이다. IRP_MJ_CREATE, IRP_MJ_CLEAN_UP 에는 Paging I/O 가 없고, Paging I/O 를 지원하는 I/O 는 아래와 같다.
  • IRP_MJ_READ
  • IRP_MJ_WRITE
  • IRP_MJ_SET_INFORMATION
  • IRP_MJ_QUERY_INFORMATION
IRP_MJ_READ 나 IRP_MJ_WRITE 의 는 Paging I/O 를 지원하는 것이 당연하고, IRP_MJ_SET_INFORMATION 이나 IRP_MJ_QUERY_INFORMATION 은 메모리 매니저가 섹션 객체를 생성하거나 접근할 때 필요할것이다.
해당 샘플(delete)의 경우 파일 삭제를 식별하기 위해 IRP_MJ_SET_INFORMATION 콜백을 등록하고, FileDispositionInformation, FileDispositionInformationEx 를 모니터링 한다. 이 I/O 는 Paging I/O 와는 상관없기때문에 FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO 를 사용한 것이다.

참고

댓글 2개:

  1. 안녕하세요
    저는 라이언로켓이라는 스타트업에 다니는 정승환이라고 합니다.

    블로그 내용들을 보다가, 제안드리고 싶은 부분이 있어서
    이렇게 댓글 남깁니다.
    혹시나 "온라인 강의" 에 대해서 관심이 있으시면
    hwan@lionrocket.ai로
    메일 한 번 주실 수 있으실까요?
    메일로 자세한 내용 나누고 싶습니다

    감사합니다.
    좋은 하루되세요 :)

    답글삭제
  2. 안녕하세요.
    제안은 감사합니다만 다른 일정들이 너무 많아서 요즘은 "강의" 요청은 특별한 상황이 아니면 받지 않고 있습니다 ^__^
    감사합니다.

    답글삭제