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 |