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
      );

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

컨텍스트

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

Irp

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

[in, optional] PostIrpRoutine

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

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

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

컨텍스트

컨텍스트 매개 변수에서 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 작업에 대한 만들기 옵션 매개 변수에 지정되었습니다. STATUS_OPLOCK_BREAK_IN_PROGRESS 성공 코드입니다.
STATUS_PENDING
기회 잠금 중단이 시작되었으며 IRP 제어가 oplock 패키지에 전달되었습니다. CompletionRoutine이 NULL이면 oplock 중단이 처리되는 동안 이 루틴은 STATUS_PENDING 반환하지 않고 차단됩니다. 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

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

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

요구 사항

   
지원되는 최소 클라이언트 이 루틴은 Microsoft Windows 2000 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 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