다음을 통해 공유


FsRtlCheckOplock 함수(ntifs.h)

FsRtlCheckOplock 루틴은 파일 I/O 작업에 대한 IRP를 파일의 현재 oplock(기회 잠금) 상태와 동기화합니다.

구문

NTSTATUS FsRtlCheckOplock(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [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, optional] Context

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

[in, optional] CompletionRoutine

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

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

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

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

매개 변수 Description
Context Context 매개 변수에서 FsRtlCheckOplock에 전달된 컨텍스트 정보 포인터입니다.
Irp I/O 작업에 대한 IRP에 대한 포인터입니다.

[in, optional] PostIrpRoutine

I/O 작업이 작업 큐에 게시되는 경우 호출자가 제공하는 콜백 루틴에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

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

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

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

매개 변수 Description
Context Context 매개 변수에서 FsRtlCheckOplock에 전달된 컨텍스트 정보 포인터입니다.
Irp I/O 작업에 대한 IRP에 대한 포인터입니다.

반환 값

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

반환 코드 설명
STATUS_CANCELLED IRP가 취소되었습니다. STATUS_CANCELLED 오류 코드입니다.
STATUS_CANNOT_BREAK_OPLOCK IRP가 IRP_MJ_CREATE 이고 FILE_OPEN_REQUIRING_OPLOCK IRP의 CreateOptions에 있는 경우 루틴은 기존 기회 잠금의 중단을 시작하지 않고 STATUS_CANNOT_BREAK_OPLOCK 실패합니다.
STATUS_OPLOCK_BREAK_IN_PROGRESS 기회 잠금 중단이 진행 중입니다. IRP는 IRP_MJ_CREATE 요청이며 FILE_COMPLETE_IF_OPLOCKED 작업에 대한 create options 매개 변수에 지정되었습니다. STATUS_OPLOCK_BREAK_IN_PROGRESS 성공 코드입니다.
STATUS_PENDING 기회 잠금 해제가 시작되었으며 IRP 제어가 oplock 패키지에 전달되었습니다. CompletionRoutine이 NULL인 경우 이 루틴은 STATUS_PENDING 반환하지 않고 oplock 중단이 처리되는 동안 차단됩니다. STATUS_PENDING 성공 코드입니다.

설명

FsRtlCheckOplock 은 다음 조건에 따라 I/O 작업에 대한 IRP를 파일의 현재 기회 잠금 상태와 동기화합니다.

  • I/O 작업으로 인해 기회 잠금이 중단되면 기회 잠금 중단이 시작됩니다.

  • 기회 잠금 중단이 완료될 때까지 I/O 작업을 계속할 수 없는 경우 FsRtlCheckOplock 은 STATUS_PENDING 반환하고 PostIrpRoutine 매개 변수가 가리키는 콜백 루틴을 호출합니다.

파일 시스템 또는 필터 드라이버가 기회 잠금을 사용하는 경우 기회 잠금 중단을 일으킬 수 있는 I/O 작업에 대한 모든 디스패치 루틴에서 FsRtlCheckOplock 을 호출해야 합니다. 이 규칙은 다음과 같은 유형의 I/O 작업에 적용됩니다. 이러한 작업으로 인해 기회 잠금이 중단될 수 있기 때문입니다.

  • IRP_MJ_CLEANUP
  • IRP_MJ_CREATE
  • IRP_MJ_FILE_SYSTEM_CONTROL
  • IRP_MJ_FLUSH_BUFFERS
  • IRP_MJ_LOCK_CONTROL
  • IRP_MJ_READ
  • IRP_MJ_SET_INFORMATION
  • IRP_MJ_WRITE

기회 잠금에 대한 자세한 내용은 Windows SDK 설명서를 참조하세요.

미니필터는 FsRtlCheckOplock 대신 FltCheckOplock을 호출해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000
대상 플랫폼 유니버설
헤더 ntifs.h(FltKernel.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock