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 |