Fungsi ExAcquireSharedWaitForExclusive (wdm.h)
Rutinitas ExAcquireSharedWaitForExclusive memperoleh sumber daya yang diberikan untuk akses bersama jika akses bersama dapat diberikan dan tidak ada pelayan eksklusif.
Sintaks
BOOLEAN ExAcquireSharedWaitForExclusive(
[in, out] PERESOURCE Resource,
[in] BOOLEAN Wait
);
Parameter
[in, out] Resource
Pointer ke sumber daya yang akan diperoleh untuk akses bersama.
[in] Wait
Menentukan perilaku rutin setiap kali sumber daya tidak dapat segera diperoleh. Jika TRUE, penelepon dimasukkan ke dalam status tunggu hingga sumber daya dapat diperoleh. Jika FALSE, rutinitas segera kembali, terlepas dari apakah sumber daya dapat diperoleh.
Nilai kembali
ExAcquireSharedWaitForExclusive mengembalikan TRUE jika akses yang diminta diberikan atau pemilik eksklusif merilis sumber daya. Rutinitas ini mengembalikan FALSE jika input TungguADALAH FALSE dan akses bersama tidak dapat segera diberikan.
Keterangan
Sebagian besar driver harus menggunakan ExAcquireResourceSharedLite alih-alih ExAcquireSharedWaitForExclusive.
Pemanggil dapat merilis sumber daya dengan memanggil ExReleaseResourceLite atau ExReleaseResourceForThreadLite.
Jika akses bersama tidak dapat segera diberikan, pemanggil dapat menunggu utas lain untuk memperoleh dan merilis kepemilikan eksklusif sumber daya.
Apakah atau kapan penelepon diberikan akses bersama ke sumber daya yang diberikan bergantung pada hal berikut:
- Jika sumber daya saat ini tidak memiliki izin, akses bersama diberikan segera ke utas saat ini.
- Jika penelepon sudah memiliki akses eksklusif ke sumber daya, utas saat ini diberikan jenis akses yang sama secara rekursif.
- Jika sumber daya saat ini dimiliki sebagai bersama dan tidak ada upaya tertunda untuk memperoleh akses eksklusif, akses bersama diberikan kepada pemanggil segera.
-
Jika sumber daya saat ini dimiliki sebagai dibagikan tetapi ada upaya tertunda untuk memperoleh akses eksklusif, pemanggil dimasukkan ke dalam status tunggu (Tunggu diatur ke TRUE) atau ExAcquireSharedWaitForExclusive mengembalikan FALSE.
Ketika utas saat ini menunggu untuk memperoleh sumber daya sampai setelah kepemilikan eksklusif yang tertunda dirilis, ExAcquireSharedWaitForExclusive mengembalikan TRUE ketika utas saat ini diberikan akses bersama ke sumber daya dan melanjutkan eksekusi.
Jika penelepon menentukan TRUE untuk parameter Tunggu , pemanggil memblokir hingga utas lain membebaskan sumber daya atas nama pemanggil, menggunakan ExReleaseResourceForThread. Penulis driver harus berhati-hati untuk memastikan bahwa utas lain benar-benar merilis sumber daya; jika tidak, penelepon akan mengalami kebuntuan. ExAcquireResourceSharedLite tidak memiliki properti ini, jadi driver harus menggunakan rutinitas tersebut kecuali mereka memerlukan perilaku tertentu dari ExAcquireSharedWaitForExclusive.
Pengiriman APC kernel normal harus dinonaktifkan sebelum memanggil rutinitas ini. Nonaktifkan pengiriman APC kernel normal dengan memanggil KeEnterCriticalRegion. Pengiriman harus tetap dinonaktifkan sampai sumber daya dirilis, di mana sumber daya dapat diaktifkan kembali dengan memanggil KeLeaveCriticalRegion. Untuk informasi selengkapnya, lihat Menonaktifkan APC.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), IrqlExApcLte3(wdm), SpNoWait(storport), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm) |
Lihat juga
ExAcquireSharedStarveExclusive
ExConvertExclusiveToSharedLite
ExIsResourceAcquiredExclusiveLite