Fungsi NdisAcquireReadWriteLock (ndis.h)

Fungsi NdisAcquireReadWriteLock memperoleh kunci yang digunakan pemanggil untuk akses tulis atau baca ke sumber daya yang dibagikan di antara utas driver.

Catatan Antarmuka kunci baca-tulis tidak digunakan lagi untuk driver NDIS 6.20 dan yang lebih baru, yang harus menggunakan NdisAcquireRWLockRead atau NdisAcquireRWLockWrite alih-alih NdisAcquireReadWriteLock.
 

Sintaks

void NdisAcquireReadWriteLock(
  [in, out] PNDIS_RW_LOCK Lock,
  [in]      BOOLEAN       fWrite,
  [_out_]   PLOCK_STATE   LockState
);

Parameter

[in, out] Lock

Penunjuk ke variabel buram yang mewakili kunci. Pemanggil dapat menggunakan kunci ini untuk mengakses sumber daya bersama.

[in] fWrite

Nilai Boolean. Jika nilainya TRUE, fungsi ini disediakan dengan akses tulis ke sumber daya bersama; jika nilainya FALSE, fungsi ini disediakan dengan akses baca.

[_out_] LockState

LockState. Penunjuk ke variabel buram yang melacak status kunci. Variabel ini ada dalam interval antara waktu pemanggil memperoleh dan melepaskan kunci. Pemanggil harus menggunakan variabel jenis LOCK_STATE yang berbeda untuk setiap upaya yang dilakukannya untuk memperoleh kunci dari utas driver non-ISR yang sama.

Nilai kembali

Tidak ada

Keterangan

Driver harus menginisialisasi variabel jenis NDIS_RW_LOCK menggunakan Fungsi NdisInitializeReadWriteLock sebelum driver memanggil fungsi NdisXxxReadWriteLock lainnya. Driver harus menyediakan penyimpanan residen untuk kunci yang digunakannya.

Setelah memperoleh kunci dengan menggunakan NdisAcquireReadWriteLock, pemanggil harus melepaskan kunci tersebut dengan memanggil Fungsi NdisReleaseReadWriteLock . Untuk mengurangi jumlah referensi kunci, driver harus memanggil
NdisReleaseReadWriteLock sekali untuk setiap panggilan ke NdisAcquireReadWriteLock.

Untuk memodifikasi sumber daya yang dibagikan di antara utas driver, utas driver harus memperoleh kunci tulis. Untuk hanya memantau sumber daya tersebut, utas driver harus memperoleh kunci baca-saja. Akses baca tidak memerlukan operasi atau ketidakcocokan yang saling mengunci. Menggunakan akses baca-saja membantu mempertahankan sistem operasi dan performa driver yang baik.

Utas driver tidak boleh memegang kunci tulis selama lebih dari 25 mikrodetik. Memegang kunci tulis untuk jangka waktu yang lama menurunkan performa sistem operasi dan driver.

Driver tidak dapat menggunakan kunci untuk melindungi sumber daya dari akses baca atau tulis yang dibagikan fungsi lain dengan MiniportInterrupt dan/atau Fungsi MiniportDisableInterruptEx . Sebaliknya, driver harus memanggil NdisMSynchronizeWithInterruptEx sehingga Fungsi MiniportSynchronizeInterrupt mengakses sumber daya bersama tersebut di DIRQL yang sama di mana sumber daya tersebut
MiniportInterrupt dan/atau Fungsi MiniportDisableInterruptEx lakukan.

NdisAcquireReadWriteLock selalu meningkatkan IRQL. Untuk operasi tulis, NdisAcquireReadWriteLock menaikkan IRQL dengan memperoleh kunci putar. Untuk operasi baca, NdisAcquireReadWriteLock secara eksplisit menaikkan IRQL ke IRQL = DISPATCH_LEVEL.

Untuk informasi selengkapnya tentang memperoleh dan melepaskan kunci putaran NDIS, lihat Sinkronisasi dan Pemberitahuan di Driver Jaringan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tidak digunakan lagi untuk driver NDIS 6.20 dan yang lebih baru, yang harus menggunakan NdisAcquireRWLockRead atau NdisAcquireRWLockWrite sebagai gantinya. Didukung untuk driver NDIS 6.0 dan NDIS 5.1 (lihat NdisAcquireReadWriteLock (NDIS 5.1)) di Windows Vista. Didukung untuk driver NDIS 5.1 (lihat NdisAcquireReadWriteLock (NDIS 5.1)) di Windows XP.
Target Platform Universal
Header ndis.h (termasuk Ndis.h)
Pustaka Ndis.lib
DLL Ndis.sys
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI Irql_Synch_Function(ndis)

Lihat juga

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx

NdisReleaseReadWriteLock