FltCancelFileOpen 함수(fltkernel.h)

미니필터 드라이버는 FltCancelFileOpen 루틴을 사용하여 새로 열거나 만든 파일을 닫을 수 있습니다.

구문

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

매개 변수

[in] Instance

호출자에 대한 불투명 instance 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] FileObject

파일에 대한 파일 개체 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

반환 값

없음

설명

미니필터 드라이버가 파일 시스템이 이미 STATUS_SUCCESS 같은 성공 NTSTATUS 값으로 작업을 완료한 후 파일 열기 또는 파일 만들기(IRP_MJ_CREATE) 작업이 실패해야 한다고 판단하는 경우 미니필터 드라이버는 생성 후 콜백 루틴에서 FltCancelFileOpen 을 호출하여 파일을 닫을 수 있습니다.

참고 STATUS_REPARSE 성공 NTSTATUS 값이지만 이 상태 값은 파일이 성공적으로 열리지 않았다는 것을 나타내기 때문에 STATUS_REPARSE 완료된 만들기 작업에 대해 FltCancelFileOpen을 호출할 필요가 없습니다.
 
FltCancelFileOpen을 성공적으로 호출하면 다음과 같은 효과가 있습니다. 미니필터 드라이버 instance 스택의 호출자 위에 있는 미니필터 드라이버 및 레거시 필터를 만들려면 만들기 요청이 실패한 것으로 보입니다. 호출자 아래에 있는 파일은 열거나 만든 다음 닫힌 것으로 보입니다.

FltCancelFileOpen은 파일에 대한 수정을 실행 취소하지 않습니다. 예를 들어 FltCancelFileOpen 은 새로 만든 파일을 삭제하거나 덮어쓰거나 이전 상태로 대체된 파일을 복원하지 않습니다.

파일에 대한 핸들을 만들기 전에 FltCancelFileOpen 을 호출해야 합니다. 호출자는 FileObject 매개 변수가 가리키는 FILE_OBJECT 구조의 Flags 멤버를 검사 수 있습니다. FO_HANDLE_CREATED 플래그가 설정된 경우 파일에 대해 하나 이상의 핸들이 만들어졌으므로 FltCancelFileOpen을 호출하는 것이 안전하지 않습니다.

FltCancelFileOpen은FileObject가 가리키는 파일 개체의 Flags 멤버에 FO_FILE_OPEN_CANCELLED 플래그를 설정합니다. 이 플래그는 만들기 작업이 취소되었으며 이 파일 개체에 대해 닫기(IRP_MJ_CLOSE) 요청이 실행됨을 나타냅니다.

만들기 작업이 취소되면 다시 실행할 수 없습니다. 자세한 내용은 FltReissueSynchronousIo를 참조하세요.

FltCancelFileOpen은 미니필터 드라이버의 생성 후 콜백 루틴에서만 호출할 수 있습니다. 다른 유형의 I/O 작업에 대해 PFLT_POST_OPERATION_CALLBACK(사후 콜백) 루틴에서 FltCancelFileOpen을 호출하거나 PFLT_PRE_OPERATION_CALLBACK(사전 운용 콜백) 루틴에서 호출하는 것은 프로그래밍 오류입니다.

FltCancelFileOpen의 호출자는 IRQL PASSIVE_LEVEL 실행 중이어야 합니다. 그러나 만들기 후 콜백 루틴은 IRP_MJ_CREATE 요청을 시작한 스레드의 컨텍스트에서 IRQL PASSIVE_LEVEL 호출되도록 보장되므로 미니필터 드라이버가 사후 생성 콜백 루틴에서 이 루틴을 호출하는 것이 안전합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL(설명 섹션 참조)

추가 정보

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

IRP_MJ_CREATE 대한 FLT_PARAMETERS

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK