Bagikan melalui


Fungsi FltInitializePushLock (fltkernel.h)

Rutinitas FltInitializePushLock menginisialisasi variabel kunci pendorongan.

Sintaks

VOID FLTAPI FltInitializePushLock(
  [out] PEX_PUSH_LOCK PushLock
);

Parameter

[out] PushLock

Penunjuk ke penyimpanan yang disediakan penelepon, yang harus setidaknya nilai sizeof(EX_PUSH_LOCK), agar variabel kunci pendorongan diinisialisasi. Penyimpanan harus selaras dengan 4 byte pada platform 32-bit, dan 8-byte yang selaras pada platform 64-bit.

Menampilkan nilai

Tidak ada

Keterangan

Penguncian push jarang menjadi pilihan yang baik untuk minifilter sistem file. Seperti yang dijelaskan di bawah ini, beberapa karakteristiknya dapat tidak kompatibel dengan sifat sistem file yang melekat kembali.

Kunci push mirip dengan struktur ERESOURCE (juga disebut "sumber daya") dengan cara berikut:

  • Penguncian pendorongan dapat digunakan untuk sinkronisasi oleh sekumpulan utas.
  • Kunci push dapat diperoleh untuk akses bersama atau eksklusif.
  • Meskipun pemanggil menyediakan penyimpanan untuk variabel kunci push, struktur EX_PUSH_LOCK buram: yaitu, anggotanya dicadangkan untuk penggunaan sistem.
Kunci push memiliki kerugian berikut jika dibandingkan dengan struktur ERESOURCE:
  • Algoritma untuk memberikan akses eksklusif tidak adil untuk semua utas. Jika ada ketidakcocokan kunci eksklusif tingkat tinggi, tidak ada jaminan tentang urutan di mana utas akan diberikan akses eksklusif.
  • Tidak ada rutinitas dukungan untuk menentukan pemilik kunci push saat ini pada durasi. (Pengguna struktur ERESOURCE dapat memanggil rutinitas seperti ExIsResourceAcquiredExclusiveLite untuk menentukan apakah utas saat ini memiliki akses eksklusif ke sumber daya.)
  • Untuk alasan yang sama, tidak ada ekstensi dukungan untuk menentukan pemilik kunci push saat ini pada waktu debug, dan dengan demikian mendiagnosis kebuntuan. (Pengguna struktur ERESOURCE dapat menggunakan !locks ekstensi dalam kd atau windbg untuk mengetahui hal ini.)
  • Tidak ada dukungan pemverifikasi driver untuk membantu diagnosis awal kebuntuan melalui kunci dorong.
  • Kunci push eksklusif tidak dapat diperoleh secara rekursif.
Penguncian push menawarkan keuntungan berikut daripada struktur ERESOURCE:
  • Ketika penguncian push sebagian besar diperoleh untuk akses bersama, kunci tersebut lebih efisien daripada struktur ERESOURCE.
  • Penyimpanan untuk kunci pendorongan dapat dialokasikan dari kumpulan halaman atau tidak berpakaian. Struktur ERESOURCE harus dialokasikan hanya dari kumpulan yang tidak disebarkan.
  • EX_PUSH_LOCK struktur jauh lebih kecil dari struktur ERESOURCE.
Kecuali salah satu keuntungan ini menarik ERESOURCE biasanya merupakan solusi yang lebih kuat dan dapat dipertahankan untuk masalah sinkronisasi Baca/Tulis.

Untuk memperoleh kunci pendorongan untuk akses eksklusif, panggil FltAcquirePushLockExclusive.

Untuk memperoleh kunci push untuk akses bersama, panggil FltAcquirePushLockShared.

Untuk melepaskan kunci push, panggil FltReleasePushLock.

Untuk menghapus kunci push, panggil FltDeletePushLock.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Rutinitas ini tersedia di Microsoft Windows XP SP2, Microsoft Windows Server 2003 SP1, dan yang lebih baru.
Target Platform Universal
Header fltkernel.h (termasuk Fltkernel.h)
Pustaka FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Lihat juga

ExIsResourceAcquiredExclusiveLite

FltAcquirePushLockExclusive

FltAcquirePushLockShared

FltDeletePushLock

FltReleasePushLock