사후 콜백 루틴에서 I/O 작업 실패
미니필터 드라이버의 사후 콜백 루틴 은 성공적인 I/O 작업에 실패할 수 있지만 단순히 I/O 작업에 실패해도 작업의 효과가 실행 취소되지는 않습니다. 미니필터 드라이버는 작업을 실행 취소하는 데 필요한 모든 처리를 수행해야 합니다.
예를 들어 미니필터 드라이버의 생성 후 콜백 루틴은 다음 단계를 수행하여 성공적인 IRP_MJ_CREATE 작업에 실패할 수 있습니다.
FltCancelFileOpen을 호출하여 만들기 작업에서 만들거나 연 파일을 닫습니다. FltCancelFileOpen은 파일에 대한 수정을 실행 취소하지 않습니다. 예를 들어 FltCancelFileOpen 은 새로 만든 파일을 삭제하거나 잘린 파일을 이전 크기로 복원하지 않습니다.
콜백 데이터 구조의 IoStatus.Status 필드를 작업의 최종 NTSTATUS 값으로 설정합니다. 이 값은 STATUS_ACCESS_DENIED 같은 유효한 오류 NTSTATUS 값이어야 합니다.
콜백 데이터 구조의 IoStatus.Information 필드를 0으로 설정합니다.
FLT_POSTOP_FINISHED_PROCESSING 반환합니다.
콜백 데이터 구조의 IoStatus.Status 필드를 작업의 최종 NTSTATUS 값으로 설정할 때 미니필터 드라이버는 유효한 오류 NTSTATUS 값을 지정해야 합니다. 미니필터 드라이버는 STATUS_FLT_DISALLOW_FAST_IO 지정할 수 없습니다. 필터 관리자만 이 NTSTATUS 값을 사용할 수 있습니다.
FltCancelFileOpen의 호출자는 IRQL <= APC_LEVEL 실행 중이어야 합니다. 그러나 미니필터 드라이버는 만들기 후 콜백 루틴에서 이 루틴을 안전하게 호출할 수 있습니다. 왜냐하면 IRP_MJ_CREATE 작업의 경우 사후 콜백 루틴은 만들기 작업을 시작한 스레드의 컨텍스트에서 IRQL = PASSIVE_LEVEL 호출되기 때문입니다.