FltCheckOplockEx 함수(fltkernel.h)
미니 필터 드라이버는 FltCheckOplockEx 루틴을 호출하여 파일의 현재 oplock(기회 잠금) 상태가 있는 IRP 기반 파일 I/O 작업에 대한 콜백 데이터 구조를 동기화합니다.
통사론
FLT_PREOP_CALLBACK_STATUS FLTAPI FltCheckOplockEx(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG Flags,
[in, optional] PVOID Context,
[in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
[in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
매개 변수
[in] Oplock
파일에 대한 불투명 불투명 포인터입니다. 이 포인터는 FltInitializeOplock
[in] CallbackData
I/O 작업에 대한 콜백 데이터 FLT_CALLBACK_DATA구조체에 대한 포인터입니다.
[in] Flags
연결된 파일 I/O 작업에 대한 비트 마스크입니다. 미니 필터 드라이버는 FltCheckOplockEx동작을 지정하는 비트를 설정합니다. Flags 매개 변수에는 다음과 같은 옵션이 있습니다.
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED(0x00000001)
oplock 중단을 발생시킨 작업을 차단하거나 보류하지 않고 기회 잠금 중단을 계속 진행할 수 있습니다.
OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY(0x00000002)
fltCheckOplockEx
OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK(0x00000004)
FsRtlCheckOplockExFltOplockFsctrl 루틴에 대한 호출을 통해 이전에 설정된 상태를 되돌리도록 지정합니다. FltOplockFsctrl IRP_MJ_CREATE 요청이 처리될 때 호출됩니다. 이 IRP_MJ_CREATE 요청은 create options 매개 변수의 FILE_OPEN_REQUIRING_OPLOCK 플래그를 지정합니다. OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 플래그는 일반적으로 이전에 실패했을 때 이러한 만들기 요청의 최종 처리에 사용됩니다.
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS(0x00000008)
기회 잠금 키에 관계없이 모든 기회 잠금 중단이 계속 진행되도록 허용합니다.
[in, optional] Context
WaitCompletionRoutine
[in, optional] WaitCompletionRoutine
호출자가 제공한 콜백 루틴에 대한 포인터입니다. oplock 중단이 진행 중인 경우 필터 관리자는 oplock 중단이 완료되면 이 루틴을 호출합니다. 이 매개 변수는 선택 사항이며 NULL
이 루틴은 다음과 같이 선언됩니다.
typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PFLT_CALLBACK_DATA CallbackData,
IN PVOID Context
);
이 루틴에는 다음과 같은 매개 변수가 있습니다.
CallbackData
I/O 작업의 콜백 데이터 구조에 대한 포인터입니다.
WaitCompleteRoutine 호출될 때 IoStatus 하위 구조가 오류 상태(예: STATUS_CANCELLED)로 채워질 수 있다는. 이 상태를 검사하고 적절하게 반응해야 합니다.
문맥
[in, optional] PrePostCallbackDataRoutine
I/O 작업이 작업 큐에 게시될 경우 호출할 호출자 제공 콜백 루틴에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL
이 루틴은 다음과 같이 선언됩니다.
typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
IN PFLT_CALLBACK_DATA CallbackData,
IN PVOID Context
);
CallbackData
I/O 작업의 콜백 데이터 구조에 대한 포인터입니다.
문맥
반환 값
FltCheckOplockEx 다음 FLT_PREOP_CALLBACK_STATUS 코드 중 하나를 반환합니다.
반환 코드 | 묘사 |
---|---|
|
FltCheckOplockEx 풀 할당 오류가 발생했거나 FsRtlCheckOplockEx 함수에 대한 호출에서 오류가 반환되었습니다. FltCheckOplockExFLT_CALLBACK_DATA 콜백 데이터 구조의 IoStatus 멤버에 대한 IO_STATUS_BLOCK 구조의 상태 멤버에 오류 코드를 설정합니다. CallbackData 매개 변수는 이 FLT_CALLBACK_DATA 구조를 가리킵니다. |
|
Oplock 중단이 시작되어 필터 관리자가 I/O 작업을 작업 큐에 게시했습니다. I/O 작업은 CallbackData 매개 변수가 가리키는 콜백 데이터로 표시됩니다. |
|
CallbackData 매개 변수가 가리키는 콜백 데이터는 보류되지 않았으며 I/O 작업이 즉시 수행되었습니다. 호출자가 Flags 매개 변수에 OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 지정한 경우 I/O 작업이 보류되지 않았더라도 oplock 중단이 실제로 진행 중일 수 있습니다. 이것이 상황인지 확인하려면 호출자는 FLT_CALLBACK_DATA 콜백 데이터 구조의 IoStatus 멤버의 IO_STATUS_BLOCK 구조의 상태 멤버에서 STATUS_OPLOCK_BREAK_IN_PROGRESS 확인해야 합니다. |
발언
미니 필터 드라이버는 FltCheckOplockEx 호출하여 IRP 기반 I/O 작업을 다음 조건에 따라 파일의 현재 oplock 상태와 동기화합니다.
I/O 작업으로 인해 oplock이 중단되면 oplock 중단이 시작됩니다.
oplock 중단이 완료될 때까지 I/O 작업을 계속할 수 없는 경우 FltCheckOplockEx FLT_PREOP_PENDING 반환하고 PrePostCallbackDataRoutine 매개 변수가 가리키는 콜백 루틴을 호출합니다.
미니 필터 드라이버가 oplock을 사용하는 경우 oplock 중단을 일으킬 수 있는 I/O 작업에 대한 사전 운용 콜백(PFLT_PRE_OPERATION_CALLBACK) 루틴에서 FltCheckOplockEx 호출해야 합니다. 이 규칙은 다음 유형의 I/O 작업에 적용됩니다. 이러한 작업으로 인해 oplock 중단이 발생할 수 있기 때문입니다.
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
I/O 작업은 IRP 기반 I/O 작업이어야 합니다. 지정된 콜백 데이터 구조가 IRP 기반 I/O 작업을 나타내는지 여부를 확인하려면 FLT_IS_IRP_OPERATION 매크로를 사용합니다.
미니 필터는 WaitCompletionRoutine지정된 콜백 내에서 FltCheckOplockEx 다시 호출해서는 안 됩니다. 이렇게 하면 FltCheckOplockEx 반환하기 전에 oplock 패키지가 완료 콜백을 호출하는 경우 교착 상태가 발생할 수 있습니다.
기회 잠금에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | FltCheckOplockEx 루틴은 Windows 7부터 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
IRQL |
<= APC_LEVEL |
참고 항목
fltOplockFsctrl
FsRtlCheckOplockEx