다음을 통해 공유


FsRtlOplockBreakH 함수(ntifs.h)

FsRtlOplockBreakH 루틴은 기회 잠금(oplock)CACHE_HANDLE_LEVEL 중단합니다.

구문

NTSTATUS FsRtlOplockBreakH(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in]           ULONG                         Flags,
  [in, optional] PVOID                         Context,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
  [in, optional] POPLOCK_FS_PREPOST_IRP        PostIrpRoutine
);

매개 변수

[in] Oplock

파일에 대한 불투명한 기회 잠금 포인터입니다. 이 포인터는 FsRtlInitializeOplock에 대한 이전 호출에 의해 초기화되어야 합니다.

[in] Irp

I/O 작업에 대한 IRP에 대한 포인터입니다.

[in] Flags

연결된 파일 I/O 작업에 대한 비트 마스크입니다. 파일 시스템 또는 필터 드라이버는 FsRtlOplockBreakH의 동작을 지정하는 비트를 설정합니다. Flags 매개 변수에는 다음과 같은 옵션이 있습니다.

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED(0x00000001)

oplock 중단을 발생시킨 작업을 차단하거나 보류하지 않고 oplock 중단을 진행할 수 있도록 지정합니다.

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS(0x00000008)

Windows 7 이상 버전에서 지원됩니다.

oplock 키에 관계없이 CACHE_HANDLE_LEVEL oplock 나누기를 계속할 수 있도록 지정합니다.

[in, optional] Context

CompletionRoutinePostIrpRoutine 매개 변수가 가리키는 콜백 루틴에 전달할 호출자 정의 컨텍스트 정보에 대한 포인터입니다.

[in, optional] CompletionRoutine

호출자가 제공한 콜백 루틴에 대한 포인터입니다. oplock 중단이 진행 중인 경우 중단이 완료되면 이 루틴이 호출됩니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. NULL인 경우 호출자는 oplock 중단이 완료될 때까지 대기 상태로 전환됩니다.

이 루틴은 다음과 같이 선언됩니다.

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

이 루틴에는 다음과 같은 매개 변수가 있습니다.

Context

Context 매개 변수에서 FsRtlOplockBreakH에 전달된 컨텍스트 정보 포인터입니다.

Irp

I/O 작업에 대한 IRP에 대한 포인터입니다.

[in, optional] PostIrpRoutine

I/O 작업이 보류될 경우 호출자가 제공한 콜백 루틴에 대한 포인터입니다. oplock 패키지가 IRP를 보류하기 전에 루틴이 호출됩니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

이 루틴은 다음과 같이 선언됩니다.

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

Context

Context 매개 변수에서 FsRtlOplockBreakH에 전달된 컨텍스트 정보 포인터입니다.

Irp

I/O 작업에 대한 IRP에 대한 포인터입니다.

반환 값

FsRtlOplockBreakH 는 STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 코드를 반환합니다.

반환 코드 설명
STATUS_CANCELLED
IRP가 취소되었습니다. STATUS_CANCELLED 오류 코드입니다.
STATUS_PENDING
IRP가 작업 큐에 게시되었습니다. STATUS_PENDING 성공 코드입니다.
STATUS_CANNOT_BREAK_OPLOCK
기회 잠금(oplock) 중단을 수행할 수 없습니다. IRP는 IRP_MJ_CREATE 요청입니다. FILE_OPEN_REQUIRING_OPLOCK 작업에 대한 create options 매개 변수에 지정되었으며 oplock이 부여되었습니다. STATUS_CANNOT_BREAK_OPLOCK 오류 코드입니다.

설명

작업이 CACHE_HANDLE_LEVEL oplock을 중단해야 하는 경우 작업은 FsRtlOplockBreakH를 호출합니다.

호출자가 Flags 매개 변수에서 OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 플래그를 지정하는 경우 FsRtlOplockBreakH 는 oplock 키에 관계없이 모든 CACHE_HANDLE_LEVEL oplock을 중단합니다. FsRtlOplockBreakH의 기본 동작은 키가 호출자의 파일 개체의 키와 일치하지 않는 oplock을 중단하는 것입니다.

미니필터는 FsRtlOplockBreakH 대신 FltOplockBreakH를 호출해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 FsRtlOplockBreakH 루틴은 Windows 7부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

FltOplockBreakH

FsRtlInitializeOplock