IRP_MJ_CLEANUP과 IRP_MJ_CLOSE의 차이점

MSDN의 정의를 따르면 다음과 같다. IRP_MJ_CLOSE응용 프로그램에서 파일을 Close할 때에 발생할 것으로 착각하기 쉽게 이름이 지어져 있지만, 사실 응용 프로그램에서 파일을 모두 Close하면, IRP_MJ_CLEANUP보내진다. 커널 공간의 여러 컴포넌트들이 마저 모든 오프젝트 레퍼런스를 반납하면 IRP_MJ_CLOSE가 발생하는 것이다.

따라서 무엇인가 파일의 내용을 추적하는 드라이버라면 IRP_MJ_CLEANUP 시점에 항상 파일의 내용을 체크하도록 해야 한다.

IRP_MJ_CLOSE

Receipt of the IRP_MJ_CLOSE request indicates that the reference count on a file object has reached zero, usually because a file system driver or other kernel-mode component has called ObDereferenceObject on the file object. This request normally follows a cleanup request. However, this does not necessarily mean that the close request will be received immediately after the cleanup request.

IRP_MJ_CLEANUP

Receipt of the IRP_MJ_CLEANUP request indicates that the handle reference count on a file object has reached zero. (In other words, all handles to the file object have been closed.) Often it is sent when a user-mode application has called the Microsoft Win32 CloseHandle function (or when a kernel-mode driver has called ZwClose) on the last outstanding handle to a file object.

Leave a Reply