Fungsi KeReleaseSemaphore (wdm.h)
Rutinitas KeReleaseSemaphore merilis objek semaphore yang ditentukan.
Sintaks
LONG KeReleaseSemaphore(
[in, out] PRKSEMAPHORE Semaphore,
[in] KPRIORITY Increment,
[in] LONG Adjustment,
[in] BOOLEAN Wait
);
Parameter
[in, out] Semaphore
Penunjuk ke objek semaphore yang diinisialisasi yang disediakan pemanggil penyimpanan.
[in] Increment
Menentukan kenaikan prioritas yang akan diterapkan jika melepaskan semaphore menyebabkan penantian terpenuhi.
[in] Adjustment
Menentukan nilai yang akan ditambahkan ke jumlah semaphore saat ini. Nilai ini harus positif.
[in] Wait
Menentukan apakah panggilan ke KeReleaseSemaphore akan segera diikuti dengan panggilan ke salah satu rutinitas KeWaitXxx . Jika TRUE, panggilan KeReleaseSemaphore harus diikuti dengan panggilan ke KeWaitForMultipleObjects, KeWaitForMutexObject, atau KeWaitForSingleObject. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
Nilai kembali
Jika nilai yang dikembalikan adalah nol, status objek semaphore sebelumnya tidak diberi sinyal.
Keterangan
KeReleaseSemaphore menyediakan peningkatan prioritas run-time untuk alur tunggu. Jika panggilan ini mengatur semaphore ke status yang disinyalir, jumlah semaphore akan bertambah oleh nilai yang ditentukan. Pemanggil juga dapat menentukan apakah akan memanggil salah satu rutinitas KeWaitXxx segera setelah KeReleaseSemaphore mengembalikan kontrol.
Merilis objek semaphore menyebabkan jumlah semaphore bertambah dengan nilai parameter Penyesuaian . Jika nilai yang dihasilkan lebih besar dari batas objek semaphore, hitungan tidak disesuaikan dan pengecualian, STATUS_SEMAPHORE_LIMIT_EXCEEDED, dinaikkan.
Menambah jumlah objek semaphore menyebabkan semaphore mencapai keadaan bersinyali, dan upaya dilakukan untuk memenuhi sebanyak mungkin menunggu pada objek semaphore.
Rutinitas KeReleaseSemaphore mungkin untuk sementara meningkatkan IRQL. Jika parameter WaitFALSE, rutinitas, sebelum kembali, memulihkan IRQL ke nilai asli yang dimilikinya di awal panggilan.
Jika Wait = TRUE, rutinitas akan kembali tanpa menurunkan IRQL. Dalam hal ini, panggilan KeReleaseSemaphore harus segera diikuti oleh panggilan KeWaitXxx . Dengan mengatur Wait = TRUE, penelepon dapat mencegah peralihan konteks yang tidak perlu terjadi antara panggilan KeReleaseSemaphore dan panggilan KeWaitXxx . Rutinitas KeWaitXxx , sebelum kembali, memulihkan IRQL ke nilai aslinya di awal panggilan KeReleaseSemaphore . Meskipun IRQL menonaktifkan peralihan konteks antara dua panggilan, panggilan ini tidak dapat digunakan dengan andal sebagai awal dan akhir operasi atomik. Misalnya, di antara kedua panggilan ini, utas yang berjalan pada saat yang sama pada prosesor lain dapat mengubah status objek semaphore atau target tunggu.
Peringatan
Utas yang dapat dipaginasi atau rutinitas driver yang dapat di-pageable yang berjalan di IRQL = PASSIVE_LEVEL tidak boleh memanggil KeReleaseSemaphore dengan parameter Tunggu diatur ke TRUE. Panggilan seperti itu menyebabkan kesalahan halaman fatal jika fungsi panggilan kebetulan di-paged antara panggilan ke KeReleaseSemaphore dan KeWaitXxx.
Untuk informasi selengkapnya tentang objek semaphore, lihat Objek Semaphore.
Penelepon KeReleaseSemaphore harus berjalan di IRQL <= DISPATCH_LEVEL asalkan Tunggu diatur ke FALSE. Jika tidak, pemanggil harus berjalan di IRQL = PASSIVE_LEVEL.
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 | Lihat bagian Keterangan. |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport) |
Lihat juga
Saran 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