Bagikan melalui


Memeriksa Status Oplock dari operasi IRP_MJ_CREATE

Berikut ini hanya berlaku ketika aliran file yang ada sedang dibuka (yaitu, aliran yang baru dibuat tidak dapat memiliki oplock yang sudah ada sebelumnya).

Catatan Saat memproses IRP_MJ_CREATE untuk oplock apa pun, jika akses yang diinginkan tidak berisi apa pun selain FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES, atau SYNCHRONIZE, oplock tidak rusak kecuali FILE_RESERVE_OPFILTER ditentukan. Menentukan FILE_RESERVE_OPFILTER selalu menghasilkan jeda oplock jika pembuatan berhasil. Untuk keringkasan dan kesederhanaan, tabel berikut menghilangkan hal-hal di atas, karena berlaku untuk semua oplock.

Jenis permintaan Kondisi

Level 1

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

Jika oplock rusak:

  • Hentian ke Tidak Ada JIKA:

    • Bendera FILE_RESERVE_OPFILTER diatur

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    LAIN:

    • Pecahkan ke Tingkat 2.
  • Pengakuan harus diterima sebelum operasi berlanjut.

Level 2

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.
  • DAN:
    • Bendera FILE_RESERVE_OPFILTER diatur

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

Jika oplock rusak:

  • Putuskan ke Tidak Ada.

  • Tidak diperlukan pengakuan, operasi segera dilanjutkan.

Batch

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

Jika oplock rusak:

  • Hentian ke Tidak Ada JIKA:

    • Bendera FILE_RESERVE_OPFILTER diatur.

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    LAIN:

    • Pecahkan ke Tingkat 2.
  • Pengakuan harus diterima sebelum operasi berlanjut.

Filter

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

  • DAN:
    • Akses yang diinginkan "dapat ditulis" diminta pada aliran yang tidak dibuka untuk akses FILE_SHARE_READ. Perhatikan bahwa akses "dapat ditulis" didefinisikan sebagai atribut apa pun selain:

      • FILE_READ_ATTRIBUTES
      • FILE_WRITE_ATTRIBUTES
      • FILE_READ_DATA
      • FILE_READ_EA
      • FILE_EXECUTE
      • MENSINKRONISASI
      • READ_CONTROL

Jika oplock rusak:

  • Putuskan ke Tidak Ada.

  • Pengakuan harus diterima sebelum operasi berlanjut.

Read

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

  • DAN:
    • Bendera FILE_RESERVE_OPFILTER diatur

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

Jika oplock rusak:

  • Putuskan ke Tidak Ada.

  • Tidak diperlukan pengakuan, operasi segera dilanjutkan.

Read-Handle

Rusak pada IRP_MJ_CREATE ketika:

  • Konflik terbuka saat ini dengan pembukaan yang ada sehingga pelanggaran berbagi akan terjadi.

    ATAU

  • Bendera FILE_RESERVE_OPFILTER diatur.

    ATAU

  • Salah satu nilai buat disposisi berikut ditentukan:

    • FILE_SUPERSEDE
    • FILE_OVERWRITE
    • FILE_OVERWRITE_IF

    DAN (untuk salah satu dari tiga kondisi di atas)

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

Jika oplock rusak:

  • Hentian ke Tidak Ada JIKA:

    • Bendera FILE_RESERVE_OPFILTER diatur.

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    LAIN:

    • Putuskan ke Baca.
  • Jika oplock pecah karena konflik terbuka saat ini dengan pembukaan yang ada sehingga pelanggaran berbagi akan terjadi, pengakuan harus diterima sebelum operasi berlanjut.
  • Jika oplock pecah karena alasan lain, meskipun pengakuan tentang istirahat diperlukan, operasi segera berlanjut (misalnya, tanpa menunggu pengakuan).

Read-Write

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

Jika oplock rusak:

  • Hentian ke Tidak Ada JIKA:

    • Bendera FILE_RESERVE_OPFILTER diatur.

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    LAIN:

    • Putuskan ke Baca.
  • Pengakuan harus diterima sebelum operasi berlanjut.

Read-Write-Handle

Rusak pada IRP_MJ_CREATE ketika:

  • Kunci oplock yang terkait dengan FILE_OBJECT tempat terbuka terjadi berbeda dari kunci oplock yang terkait dengan FILE_OBJECT yang memiliki oplock.

Jika oplock rusak:

  • Hentian ke Tidak Ada JIKA:

    • Bendera FILE_RESERVE_OPFILTER diatur.

      ATAU

    • Salah satu nilai buat disposisi berikut ditentukan:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    LAIN:

    • Hentian untuk Read-Write jika konflik terbuka saat ini dengan pembukaan yang ada sehingga pelanggaran berbagi akan terjadi. Jika tidak, putuskan ke Read-Handle.

  • Pengakuan harus diterima sebelum operasi berlanjut.

Sistem file melakukan pemeriksaan tambahan untuk oplock Batch dan Filter (bukan paket oplock itu sendiri) saat memproses operasi IRP_MJ_CREATE, yang berdampak pada apakah sistem file meminta paket oplock untuk melakukan pemrosesan oplock break. Ini adalah kasus di mana operasi pada satu aliran data dapat memengaruhi oplock pada aliran data lain dari file yang sama (yaitu, dua item daftar terakhir dari daftar kriteria berikut). Jika satu atau beberapa kriteria berikut terpenuhi, sistem file mengirimkan permintaan ke paket oplock untuk melakukan pemrosesan oplock break:

  • Minta jeda jika ini adalah kueri jaringan yang terbuka dan transaksi KTM ada. Jika tidak, jangan minta jeda pada kueri jaringan yang terbuka.

  • Jika operasi SUPERSEDE, OVERWRITE, atau OVERWRITE_IF dilakukan pada aliran data alternatif dan FILE_SHARE_DELETE tidak ditentukan dan ada oplock Batch atau Filter pada aliran data utama, minta jeda oplock Batch atau Filter pada aliran data utama.

  • Jika operasi SUPERSEDE, OVERWRITE, atau OVERWRITE_IF dilakukan pada aliran data utama dan akses DELETE telah diminta dan ada oplock Batch atau Filter pada aliran data alternatif apa pun, minta jeda operasi Batch atau Filter pada semua aliran data alternatif yang memilikinya.

Ketika sistem file memutuskan untuk meminta paket oplock untuk melakukan pemrosesan oplock break, aturan yang ditata dalam tabel sebelumnya berlaku.

Pemeriksaan untuk memutus oplock Batch dan Filter terjadi sebelum pemeriksaan akses berbagi dilakukan. Ini berarti oplock Batch atau Filter rusak bahkan jika permintaan terbuka pada akhirnya gagal karena pelanggaran berbagi.