Fungsi KeSetEvent (wdm.h)
Rutinitas KeSetEvent mengatur objek peristiwa ke status bersinyali jika peristiwa belum diberi sinyal, dan mengembalikan status objek peristiwa sebelumnya.
Sintaks
LONG KeSetEvent(
[in, out] PRKEVENT Event,
[in] KPRIORITY Increment,
[in] BOOLEAN Wait
);
Parameter
[in, out] Event
Penunjuk ke objek peristiwa yang diinisialisasi yang pemanggilnya menyediakan penyimpanan.
[in] Increment
Menentukan kenaikan prioritas yang akan diterapkan jika mengatur peristiwa menyebabkan penantian terpenuhi.
[in] Wait
Menentukan apakah panggilan ke KeSetEvent akan segera diikuti dengan panggilan ke salah satu rutinitas KeWaitXxx . Jika TRUE, panggilan KeSetEvent harus diikuti dengan panggilan ke KeWaitForMultipleObjects, KeWaitForMutexObject, atau KeWaitForSingleObject. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
Nilai kembali
Jika status objek peristiwa sebelumnya diberi sinyal, nilai bukan nol dikembalikan.
Keterangan
Memanggil KeSetEvent menyebabkan peristiwa mencapai status bersinyali. Jika peristiwa adalah peristiwa pemberitahuan, sistem mencoba untuk memenuhi sebanyak mungkin menunggu pada objek peristiwa. Peristiwa ini tetap disinyalir sampai panggilan ke KeClearEvent atau KeResetEvent menghapusnya. Jika peristiwa adalah peristiwa sinkronisasi, satu tunggu terpenuhi sebelum sistem secara otomatis menghapus peristiwa.
Rutinitas KeSetEvent 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 KeSetEvent harus segera diikuti oleh panggilan KeWaitXxx . Dengan mengatur Wait = TRUE, pemanggil dapat mencegah peralihan konteks yang tidak perlu terjadi antara panggilan KeSetEvent dan panggilan KeWaitXxx . Rutinitas KeWaitXxx , sebelum kembali, memulihkan IRQL ke nilai aslinya di awal panggilan KeSetEvent . 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 mungkin mengubah status objek peristiwa atau target tunggu.
Utas yang dapat dipertanyakan atau rutinitas driver yang dapat dipertanyakan yang berjalan di IRQL = PASSIVE_LEVEL tidak boleh memanggil KeSetEvent dengan parameter Tunggu yang diatur ke TRUE. Panggilan seperti itu menyebabkan kesalahan halaman fatal jika pemanggil kebetulan di-page out antara panggilan ke KeSetEvent dan KeWaitXxx.
Untuk informasi selengkapnya tentang objek peristiwa, lihat Objek Peristiwa.
Jika Tunggu diatur ke FALSE, pemanggil dapat berjalan di IRQL <= DISPATCH_LEVEL. Jika tidak, penelepon KeSetEvent harus berjalan di IRQL <= APC_LEVEL dan dalam konteks utas nonarbitrer.
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 | CompletionEventChecking(wdm), DoubleKeSetEvent(storport), HwStorPortProhibitedDIs(storport), IoAllocateIrpSignalEventInCompletion(wdm), IoBuildDeviceIoControlSetEvent(wdm), IoBuildFsdIrpSignalEventInCompletion(wdm), IrqlKeSetEvent(wdm), SignalEventInCompletion(wdm) |
Lihat juga
Menentukan Peningkatan Prioritas Saat Menyelesaikan Permintaan I/O
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