Fungsi NdisAcquireRWLockRead (ndis.h)
Fungsi NdisAcquireRWLockRead mendapatkan kunci baca yang digunakan pemanggil untuk akses baca ke sumber daya yang dibagikan di antara utas driver.
Sintaks
void NdisAcquireRWLockRead(
[in] PNDIS_RW_LOCK_EX Lock,
[out] PLOCK_STATE_EX LockState,
[in] UCHAR Flags
);
Parameter
[in] Lock
Penunjuk ke variabel NDIS_RW_LOCK_EX buram yang mewakili kunci. Pemanggil dapat menggunakan kunci ini untuk mendapatkan akses tulis atau baca ke sumber daya yang dibagikan antara utas driver non-ISR.
[out] LockState
Penunjuk ke variabel LOCK_STATE_EX buram yang melacak status kunci. Variabel ini ada dalam interval antara waktu yang diperoleh pemanggil dan melepaskan kunci. Pemanggil harus menggunakan variabel jenis LOCK_STATE_EX yang berbeda untuk setiap upaya yang dilakukannya untuk mendapatkan kunci dari utas driver non-ISR yang sama.
[in] Flags
Nilai ULONG yang berisi bendera kunci. Atur parameter ini ke NDIS_RWL_AT_DISPATCH_LEVEL jika IRQL penelepon saat ini DISPATCH_LEVEL. Jika tidak, atur parameter ini ke nol. Untuk informasi selengkapnya tentang pengiriman pelacakan IRQL, lihat Pengiriman Pelacakan IRQL.
Nilai kembali
Tidak ada
Keterangan
Driver NDIS memanggil fungsi NdisAcquireRWLockRead untuk mendapatkan akses baca-saja ke sumber daya yang dibagikan di antara utas driver.
Driver harus mengalokasikan variabel jenis NDIS_RW_LOCK_EX dengan fungsi NdisAllocateRWLock sebelum driver memanggil fungsi NdisAcquireRWLockRead .
Setelah driver memanggil NdisAllocateRWLock, driver dapat memanggil NdisAcquireRWLockWrite atau NdisAcquireRWLockRead untuk mendapatkan akses tulis atau baca ke sumber daya. Hanya satu utas driver non-ISR pada satu waktu yang dapat memperoleh akses tulis ke sumber daya. Ketika satu utas non-ISR memiliki akses tulis, semua akses baca dan tulis oleh utas non-ISR lainnya harus menunggu hingga pemegang akses tulis melepaskan kunci. Namun, jika utas non-ISR memiliki akses baca, utas non-ISR lainnya dapat secara bersamaan mendapatkan akses baca.
Kunci NDIS_RW_LOCK_EX tidak mendukung promosi dari baca ke tulis. Setelah prosesor memperoleh NDIS_RW_LOCK_EX untuk akses baca (dengan memanggil NdisAcquireRWLockRead), prosesor yang sama tidak boleh mencoba memperoleh akses tulis (dengan memanggil NdisAcquireRWLockWrite) hingga akses baca sebelumnya dirilis.
Kunci baca NDIS_RW_LOCK_EX dapat diperoleh secara rekursif pada prosesor yang sama. Untuk setiap panggilan ke NdisAcquireRWLockRead, harus ada panggilan yang sesuai ke NdisReleaseRWLock. Kunci hanya dirilis setelah panggilan terakhir ke NdisReleaseRWLock.
Driver tidak dapat menggunakan kunci untuk melindungi sumber daya dari akses baca atau tulis yang dibagikan fungsi lain dengan MiniportInterrupt atau Fungsi MiniportDisableInterruptEx , atau keduanya. Sebaliknya, driver harus memanggil NdisMSynchronizeWithInterruptEx sehingga Fungsi MiniportSynchronizeInterrupt mengakses sumber daya bersama tersebut di DIRQL yang sama dengan MiniportInterrupt atau Fungsi MiniportDisableInterruptEx , atau keduanya.
NdisAcquireRWLockRead selalu menaikkan IRQL ke IRQL = DISPATCH_LEVEL.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Didukung di NDIS 6.20 dan yang lebih baru. |
Target Platform | Universal |
Header | ndis.h (termasuk Ndis.h) |
Pustaka | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Lihat juga
MiniportSynchronizeInterrupt NdisMSynchronizeWithInterruptExSaran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk