Fungsi FltOplockBreakToNoneEx (fltkernel.h)

Rutinitas FltOplockBreakToNoneEx menghancurkan semua kunci oportunistik (oplock) segera tanpa memperhatikan kunci oplock apa pun.

Sintaks

FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakToNoneEx(
  [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
);

Parameter

[in] Oplock

Penunjuk oplock buram untuk file. Pointer ini harus diinisialisasi oleh panggilan sebelumnya ke FltInitializeOplock.

[in] CallbackData

Penunjuk ke struktur data panggilan balik (FLT_CALLBACK_DATA) untuk operasi I/O.

[in] Flags

Bitmask untuk operasi I/O file terkait. Driver minifilter mengatur bit untuk menentukan perilaku FltOplockBreakToNoneEx. Parameter Bendera memiliki opsi berikut:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Memungkinkan pembobolan oplock untuk melanjutkan tanpa memblokir atau menunggu operasi yang menyebabkan oplock rusak. Biasanya, bendera ini hanya digunakan jika operasi I/O yang diwakili oleh data panggilan balik yang ditunjuk parameter CallbackData adalah operasi IRP_MJ_CREATE.

[in, optional] Context

Penunjuk ke informasi konteks yang ditentukan pemanggil untuk diteruskan ke rutinitas panggilan balik yang ditunjukkan oleh parameter WaitCompletionRoutine dan PrePostCallbackDataRoutine .

[in, optional] WaitCompletionRoutine

Penunjuk ke rutinitas panggilan balik yang disediakan penelepon. Jika jeda oplock sedang berlangsung, rutinitas ini dipanggil ketika istirahat selesai. Parameter ini bersifat opsional dan dapat berupa NULL. Jika NULL, penelepon dimasukkan ke dalam status tunggu sampai pemecahan oplock selesai.

Rutinitas ini dinyatakan sebagai berikut:

typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

Rutinitas ini memiliki parameter berikut:

CallbackData

Penunjuk ke struktur data panggilan balik untuk operasi I/O.

Konteks

Penunjuk informasi konteks yang diteruskan dalam parameter Konteks ke FltOplockBreakToNoneEx.

[in, optional] PrePostCallbackDataRoutine

Penunjuk ke rutinitas panggilan balik yang disediakan penelepon untuk dipanggil jika operasi I/O akan ditunda. Rutinitas dipanggil sebelum paket oplock menunggu IRP. Parameter ini bersifat opsional dan dapat berupa NULL.

Rutinitas ini dinyatakan sebagai berikut:

typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

Rutinitas ini memiliki parameter berikut:

CallbackData

Penunjuk ke struktur data panggilan balik untuk operasi I/O.

Konteks

Penunjuk informasi konteks yang diteruskan dalam parameter Konteks ke FltOplockBreakToNoneEx.

Nilai kembali

FltOplockBreakToNoneEx mengembalikan salah satu kode FLT_PREOP_CALLBACK_STATUS berikut:

Menampilkan kode Deskripsi
FLT_PREOP_COMPLETE
FltOplockBreakToNoneEx mengalami kegagalan alokasi kumpulan, atau panggilan ke fungsi FsRtlOplockBreakToNoneEx mengembalikan kesalahan. FltOplockBreakToNoneEx akan mengatur kode kesalahan di anggota Status struktur IO_STATUS_BLOCK . Struktur IO_STATUS_BLOCK ditentukan dalam anggota IoStatus dari struktur data panggilan balik FLT_CALLBACK_DATA . Parameter CallbackData menunjuk ke FLT_CALLBACK_DATA ini.
FLT_PREOP_PENDING
Pemutusan oplock dimulai, yang menyebabkan Manajer Filter memposting operasi I/O ke antrean kerja. Operasi I/O diwakili oleh data panggilan balik yang ditunjuk oleh parameter CallbackData .
FLT_PREOP_SUCCESS_WITH_CALLBACK
Data panggilan balik yang ditunjuk parameter CallbackData tidak tertunda, dan operasi I/O segera dilakukan. Ketahuilah bahwa jika penelepon yang ditentukan OPLOCK_FLAG_COMPLETE_IF_OPLOCKED dalam parameter Bendera , pemutusan oplock mungkin benar-benar sedang berlangsung meskipun operasi I/O tidak tertunda. Untuk menentukan apakah ini situasinya, pemanggil harus memeriksa STATUS_OPLOCK_BREAK_IN_PROGRESS di anggota Status struktur IO_STATUS_BLOCK . Struktur IO_STATUS_BLOCK ditentukan dalam anggota IoStatus dari struktur data panggilan balik FLT_CALLBACK_DATA .

Keterangan

Untuk informasi selengkapnya tentang kunci oportunistik, lihat dokumentasi Microsoft Windows SDK.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Rutinitas FltOplockBreakToNoneEx tersedia dimulai dengan Windows 7.
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
Pustaka FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Lihat juga

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakToNoneEx

IO_STATUS_BLOCK