Fungsi FsRtlCheckUpperOplock (ntifs.h)

Rutinitas FsRtlCheckUpperOplock menyediakan pemeriksaan kunci oportunistik (oplock) di sistem file sekunder, atau berlapis ketika oplock mereka memegang status perubahan. Sistem file sekunder, seperti pengalih jaringan dan layanan file pengklusteran, panggil FsRtlCheckUpperOplock ketika oplock disimpan dalam sistem file yang lebih rendah oleh sistem file sekunder, mengubah status. Perubahan status dapat terjadi baik dengan jeda atau peningkatan. FsRtlCheckUpperOplock akan merusak oplock sistem file atas, jika perlu, untuk mengonfirmasi status oplock bawah baru. Pemanggil juga dapat memberikan panggilan balik opsional untuk pemberitahuan pengakuan jeda dan status tertunda.

Sintaks

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

Parameter

[in] Oplock

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

[in] NewLowerOplockState

Nilai yang mewakili oplock yang diminta disimpan dalam sistem file yang lebih rendah oleh sistem file sekunder. Ini kombinasi bitwise OR dari berikut ini:

Nilai Makna
OPLOCK_LEVEL_CACHE_READ Menunjukkan jenis Baca (R) oplock.
OPLOCK_LEVEL_CACHE_WRITE Menunjukkan jenis Tulis oplock (W).
OPLOCK_LEVEL_CACHE_HANDLE Menunjukkan jenis Handel oplock (H).

[in, optional] CompletionRoutineContext

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

[in, optional] CompletionRoutine

Pointer 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.

Deklarasi rutin dan deskripsi parameter ini adalah sebagai berikut:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
Parameter Deskripsi
Konteks Penunjuk informasi konteks yang diteruskan dalam parameter CompletionRoutineContext ke FsRtlCheckUpperOplock.
Irp Penunjuk opsional ke IRP untuk operasi I/O. FsRtlCheckUpperOplock akan selalu mengatur ini ke NULL.

PrePendRoutine

Penunjuk ke rutinitas panggilan balik yang disediakan penelepon untuk dipanggil jika FsRtlCheckUpperOplock akan mengembalikan STATUS_PENDING. Parameter ini bersifat opsional dan dapat berupa NULL.

Deklarasi rutin dan deskripsi parameter ini adalah sebagai berikut:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
Parameter Deskripsi
Konteks Penunjuk informasi konteks yang diteruskan dalam parameter CompletionRoutineContext ke FsRtlCheckUpperOplock.
Irp Penunjuk opsional ke IRP untuk operasi I/O. FsRtlCheckUpperOplock akan selalu mengatur ini ke NULL.

[in] Flags

Bitmask untuk operasi I/O file terkait. Sistem file atau driver filter mengatur bit untuk menentukan perilaku FsRtlCheckUpperOplock. Parameter Bendera memiliki opsi berikut:

Nilai Makna
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Mengembalikan STATUS_CANNOT_BREAK_OPLOCK jika nilai NewLowerOplockState menghasilkan pemisah oplock apa pun.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Putuskan hanya baca (R) oplock atas dan beri tahu pemegang R bahwa mereka dapat kembali meminta R. Semua pemeriksaan oplock atas lainnya akan mengembalikan STATUS_CANNOT_BREAK_OPLOCK.

Mengembalikan nilai

FsRtlCheckUpperOplock mengembalikan kode NTSTATUS yang sesuai seperti salah satu dari berikut ini:

Menampilkan kode Deskripsi
STATUS_SUCCESS Pembobolan oplock tidak diperlukan atau jeda diakui. Jika CompletionRoutine ADALAH NULL, FsRtlCheckUpperOplock memblokir saat jeda oplock diproses daripada mengembalikan STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK Pembobolan oplock tidak dapat dicapai. Lihat Bendera untuk kondisi yang membatasi jeda.
STATUS_PENDING Pemutusan kunci oportunistik sedang berlangsung. Jika disediakan, PrePendIrpRoutine dipanggil sebagai pemberitahuan operasi yang tertunda. CompletionRoutine dipanggil ketika jeda oplock selesai. STATUS_PENDING adalah kode sukses.

Persyaratan

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

Lihat juga

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl