다음을 통해 공유


IoCancelFileOpen 함수(ntddk.h)

파일 시스템 필터 드라이버에서 IoCancelFileOpen 루틴을 사용하여 필터 드라이버의 디바이스 스택에서 파일 시스템 드라이버가 연 파일을 닫을 수 있습니다.

구문

void IoCancelFileOpen(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PFILE_OBJECT   FileObject
);

매개 변수

[in] DeviceObject

필터 드라이버의 디바이스 개체 바로 아래에 있는 디바이스 스택의 맨 위에 대한 포인터입니다.

[in] FileObject

파일을 닫을 파일 개체에 대한 포인터입니다.

반환 값

없음

설명

파일 시스템 필터 드라이버가 하위 수준 드라이버가 이미 STATUS_SUCCESS 요청을 완료한 후 파일 열기 또는 파일 만들기 요청이 실패해야 한다고 판단하는 경우 IoCancelFileOpen 을 사용하여 하위 수준 드라이버에서 연 파일을 닫을 수 있습니다.

STATUS_REPARSE 성공 NTSTATUS 값이지만 STATUS_REPARSE 완료된 만들기 작업에 대해 IoCancelFileOpen을 호출할 필요는 없습니다. 이 상태 값은 파일이 성공적으로 열리지 않았다는 것을 나타내기 때문입니다.

IoCancelFileOpen을 성공적으로 호출하면 다음과 같은 효과가 있습니다. 파일 시스템 스택의 호출자 위에 있는 미니필터 및 레거시 필터를 만들려면 만들기 요청이 실패한 것으로 보입니다. 호출자 아래에 있는 파일은 열거나 만든 다음 닫힌 것으로 보입니다.

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

일반적인 예는 다음과 같습니다.

  • 필터 드라이버는 상위 수준 필터 드라이버와 하위 수준 파일 시스템 드라이버 사이에 존재합니다.

  • 필터 드라이버는 IRP_MJ_CREATE 요청을 디바이스 스택 아래로 파일 시스템 드라이버에 전달하고 파일 시스템 드라이버는 상태 STATUS_SUCCESS IRP_MJ_CREATE 요청을 완료합니다.

  • 필터 드라이버가 만들기 요청을 완료하기 전에 파일을 닫아야 한다고 결정합니다.

  • 필터 드라이버는 IoCancelFileOpen 을 사용하여 파일 시스템 드라이버에서 연 파일을 닫습니다.

IoCancelFileOpen을 호출한 후 필터 드라이버는 STATUS_UNSUCCESSFUL 또는 STATUS_ACCESS_DENIED 같은 적절한 오류 코드로 만들기 요청을 완료해야 합니다. 또한 Irp-IoStatus.Information> 필드를 0으로 설정해야 합니다.

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

IoCancelFileOpen은FileObject가 가리키는 파일 개체의 Flags 멤버에 FO_FILE_OPEN_CANCELLED 플래그를 설정합니다. 이 플래그는 IRP_MJ_CREATE 요청이 취소되었으며 이 파일 개체에 대해 IRP_MJ_CLOSE 요청이 발급됨을 나타냅니다. 만들기 작업이 취소되면 다시 실행할 수 없습니다. 즉, IoCreateFileOpen 루틴을 호출한 경우 레거시 필터 드라이버에서 STATUS_REPARSE 반환할 수 없습니다.

미니필터는 IoCancelFileOpen 대신 FltCancelFileOpen을 사용해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 이 루틴은 Microsoft Windows 2000 이상에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h, Ntifs.h, Fltkernel.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

추가 정보

FltCancelFileOpen

FltReissueSynchronousIo

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateFile

ZwOpenFile