IRP_MJ_CLOSE(IFS)

보낸 경우

IRP_MJ_CLOSE 요청 수신은 파일 시스템 드라이버 또는 다른 커널 모드 구성 요소가 파일 개체에서 ObDereferenceObject 를 호출했기 때문에 파일 개체의 참조 수가 0에 도달했음을 나타냅니다. 이 요청은 일반적으로 정리 요청을 따릅니다. 그러나 이것이 반드시 정리 요청 직후에 닫기 요청이 수신된다는 것을 의미하지는 않습니다.

작업: 파일 시스템 드라이버

대상 디바이스 개체가 파일 시스템의 제어 디바이스 개체인 경우 파일 시스템 드라이버는 필요한 처리를 수행한 후 IRP를 완료해야 합니다.

그렇지 않으면 파일 시스템 드라이버가 닫기 요청을 처리해야 합니다.

작업: 파일 시스템 필터 드라이버

대상 디바이스 개체가 필터 드라이버의 제어 디바이스 개체인 경우 필터 드라이버는 컨트롤 디바이스 개체와의 통신을 종료하고 IRP를 완료하는 데 필요한 작업을 수행해야 합니다.

그렇지 않으면 필터 드라이버가 유지 관리하는 파일별 및 파일별 개체 컨텍스트 정보를 삭제하는 등 필요한 처리를 수행한 후 필터 드라이버가 스택의 다음 하위 드라이버로 IRP를 전달해야 합니다.

파일 시스템 필터 드라이버 작성기는 IoCreateStreamFileObject 로 인해 IRP_MJ_CLEANUP 요청이 볼륨의 파일 시스템 드라이버 스택으로 전송된다는 점에 유의해야 합니다. 파일 시스템은 종종 스트림 파일 개체를 IRP_MJ_CREATE 이외의 작업의 부작용으로 만들기 때문에 필터 드라이버가 스트림 파일 개체 생성을 안정적으로 검색하기가 어렵습니다. 따라서 필터 드라이버는 이전에 보이지 않는 파일 개체에 대한 IRP_MJ_CLEANUPIRP_MJ_CLOSE 요청을 수신해야 합니다.

또한 필터 드라이버 작성기는 IoCreateStreamFileObject와 달리 IoCreateStreamFileObjectLite 는 파일 시스템 드라이버 스택에 IRP_MJ_CLEANUP 요청을 보내지 않습니다. 이러한 이유로 파일 시스템은 종종 IRP_MJ_CREATE 이외의 작업의 부작용으로 스트림 파일 개체를 만들기 때문에 필터 드라이버가 스트림 파일 개체 생성을 안정적으로 검색하기 어렵습니다. 따라서 필터 드라이버는 이전에 보이지 않는 파일 개체에 대한 IRP_MJ_CLOSE 요청을 수신해야 합니다.

매개 변수

파일 시스템 또는 필터 드라이버는 지정된 IRP를 사용하여 IoGetCurrentIrpStackLocation 을 호출하여 IRP의 자체 스택 위치에 대한 포인터를 가져옵니다. IrpSp로 다음 목록에 나와 있습니다. (IRP는 Irp로 표시됩니다.) 드라이버는 닫기 요청을 처리할 때 IRP 및 IRP 스택 위치의 다음 멤버에 설정된 정보를 사용할 수 있습니다.

DeviceObject
대상 디바이스 개체에 대한 포인터입니다.

Irp 플래그>
이 요청에 대해 다음 플래그가 설정됩니다.

IRP_CLOSE_OPERATION

IRP_SYNCHRONOUS_API

Irp-> 요청된 작업에 대한 최종 완료 상태 및 정보를 수신하는 IO_STATUS_BLOCK 구조체에 대한 IoStatus 포인터입니다.

IrpSp-> DeviceObject 와 연결된 파일 개체에 대한 FileObject 포인터입니다.

IrpSp-FileObject> 매개 변수에는 FILE_OBJECT 구조인 RelatedFileObject 필드에 대한 포인터가 포함되어 있습니다. FILE_OBJECT 구조체의 RelatedFileObject 필드는 IRP_MJ_CLOSE 처리하는 동안 유효하지 않으므로 사용하면 안 됩니다.

IrpSp-> MajorFunction은 IRP_MJ_CLOSE 지정합니다.

참고 항목

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLOSE(WDK 커널 참조)

IRP_MJ_CLEANUP

IRP_MJ_CREATE

ObDereferenceObject