Bagikan melalui


Fungsi FsRtlCheckOplock (ntifs.h)

Rutinitas FsRtlCheckOplock menyinkronkan IRP untuk operasi I/O file dengan status kunci oportunistik (oplock) file saat ini.

Sintaks

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

Parameter

[in] Oplock

Penunjuk kunci oportunistik buram untuk file. Pointer ini harus diinisialisasi oleh panggilan sebelumnya ke FsRtlInitializeOplock.

[in] Irp

Penunjuk ke IRP untuk operasi I/O.

[in, optional] Context

Penunjuk ke informasi konteks yang ditentukan penelepon untuk diteruskan ke rutinitas panggilan balik yang ditunjukkan oleh parameter CompletionRoutine dan PostIrpRoutine .

[in, optional] CompletionRoutine

Penunjuk ke rutinitas panggilan balik yang disediakan penelepon. Jika pemutusan kunci oportunistik 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 pemutusan kunci oportunistik selesai.

Rutinitas ini dinyatakan sebagai berikut:

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

Rutinitas ini memiliki parameter berikut:

Parameter Deskripsi
Konteks Penunjuk informasi konteks yang diteruskan dalam parameter Konteks ke FsRtlCheckOplock.
Irp Penunjuk ke IRP untuk operasi I/O.

[in, optional] PostIrpRoutine

Penunjuk ke rutinitas panggilan balik yang disediakan penelepon untuk dipanggil jika operasi I/O diposting ke antrean kerja. Parameter ini bersifat opsional dan dapat berupa NULL.

Rutinitas ini dinyatakan sebagai berikut:

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

Rutinitas ini memiliki parameter berikut:

Parameter Deskripsi
Konteks Penunjuk informasi konteks yang diteruskan dalam parameter Konteks ke FsRtlCheckOplock.
Irp Penunjuk ke IRP untuk operasi I/O.

Nilai kembali

Rutinitas FsRtlCheckOplock mengembalikan STATUS_SUCCESS atau kode NTSTATUS yang sesuai seperti salah satu hal berikut ini:

Menampilkan kode Deskripsi
STATUS_CANCELLED IRP dibatalkan. STATUS_CANCELLED adalah kode kesalahan.
STATUS_CANNOT_BREAK_OPLOCK Jika IRP adalah IRP_MJ_CREATE dan FILE_OPEN_REQUIRING_OPLOCK ada di CreateOptions IRP, rutinitas tidak akan memulai pemutusan kunci oportunistik yang ada, tetapi gagal dengan STATUS_CANNOT_BREAK_OPLOCK.
STATUS_OPLOCK_BREAK_IN_PROGRESS Pemutusan kunci oportunistik sedang berlangsung. IRP adalah permintaan IRP_MJ_CREATE, dan FILE_COMPLETE_IF_OPLOCKED ditentukan dalam parameter opsi buat untuk operasi. STATUS_OPLOCK_BREAK_IN_PROGRESS adalah kode keberhasilan.
STATUS_PENDING Pemutusan kunci oportunistik telah dimulai, dan kontrol IRP telah diteruskan ke paket oplock. Jika CompletionRoutine adalah NULL, rutinitas ini akan memblokir saat jeda oplock diproses, bukan mengembalikan STATUS_PENDING. STATUS_PENDING adalah kode sukses.

Keterangan

FsRtlCheckOplock menyinkronkan IRP untuk operasi I/O dengan status kunci oportunistik file saat ini sesuai dengan kondisi berikut:

  • Jika operasi I/O akan menyebabkan kunci oportunistik rusak, pemutusan kunci oportunistik dimulai.

  • Jika operasi I/O tidak dapat dilanjutkan sampai pemutusan kunci oportunistik selesai, FsRtlCheckOplock mengembalikan STATUS_PENDING dan memanggil rutinitas panggilan balik yang ditunjuk parameter PostIrpRoutine .

Jika sistem file atau driver filter menggunakan kunci oportunistik, sistem file harus memanggil FsRtlCheckOplock dari rutinitas pengiriman apa pun untuk operasi I/O yang dapat menyebabkan pemutusan kunci oportunistik. Aturan ini berlaku untuk jenis operasi I/O berikut, karena operasi ini dapat menyebabkan pemutusan kunci oportunistik:

  • 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

Untuk informasi terperinci tentang kunci oportunistik, lihat dokumentasi Windows SDK.

Minifilter harus memanggil FltCheckOplock alih-alih FsRtlCheckOplock.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000
Target Platform Universal
Header ntifs.h (termasuk FltKernel.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Lihat juga

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