Fungsi NdisDprAcquireReadWriteLock (ndis.h)

Fungsi NdisDprAcquireReadWriteLock 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 (pengaturan NDIS_RWL_AT_DISPATCH_LEVEL dalam parameter Bendera ) alih-alih NdisDprAcquireReadWriteLock.
 

Sintaks

void NdisDprAcquireReadWriteLock(
  [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

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.

Mengembalikan nilai

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 NdisDprAcquireReadWriteLock, pemanggil harus melepaskan kunci tersebut dengan memanggil fungsi NdisDprReleaseReadWriteLock . Untuk mengurangi jumlah referensi kunci, driver harus memanggil
NdisDprReleaseReadWriteLock sekali untuk setiap panggilan ke NdisDprAcquireReadWriteLock.

Aman untuk menggunakan NdisDprAcquireReadWriteLock dan NdisDprAcquireReadWriteLock pada kunci yang sama. Namun, panggilan harus seimbang sehingga jika kunci diperoleh dengan NdisDprAcquireReadWriteLock, panggilan harus dirilis dengan NdisDprReleaseReadWriteLock. Demikian juga, jika kunci diperoleh dengan NdisAcquireReadWriteLock, kunci harus dilepaskan dengan NdisReleaseReadWriteLock.

Dengan beberapa arsitektur, NdisDprAcquireReadWriteLock berkinerja lebih cepat daripada NdisAcquireReadWriteLock. Driver dapat menggunakan NdisDprAcquireReadWriteLock daripada NdisAcquireReadWriteLock ketika dipastikan bahwa IRQL saat ini sudah DISPATCH_LEVEL. Namun, itu tidak diperlukan. Overhead memanggil fungsi KeGetCurrentIrql lebih besar dari keuntungan performa memanggil NdisDprAcquireReadWriteLock daripada NdisAcquireReadWriteLock.

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

Utas driver tidak boleh memegang kunci tulis untuk 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 . Sebagai gantinya, driver harus memanggil NdisMSynchronizeWithInterruptEx sehingga Fungsi MiniportSynchronizeInterrupt mengakses sumber daya bersama tersebut di DIRQL yang sama di mana
MiniportInterrupt dan/atau Fungsi MiniportDisableInterruptEx melakukannya.

Untuk informasi selengkapnya tentang memperoleh dan merilis kunci spin 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 alih-alih NdisDprAcquireReadWriteLock. Didukung di NDIS 6.0 dan 6.1.
Target Platform Universal
Header ndis.h (termasuk Ndis.h)
Pustaka Ndis.lib
IRQL = DISPATCH_LEVEL

Lihat juga

LOCK_STATE

MiniportDisableInterruptEx

MiniportInterrupt

MiniportSynchronizeInterrupt

NdisAcquireRWLockRead

NdisAcquireRWLockWrite

NdisDprReleaseReadWriteLock

NdisInitializeReadWriteLock

NdisMSynchronizeWithInterruptEx