Fungsi IoCreateNotificationEvent (wdm.h)
Rutinitas IoCreateNotificationEvent membuat atau membuka peristiwa pemberitahuan bernama yang digunakan untuk memberi tahu satu atau beberapa utas eksekusi bahwa suatu peristiwa telah terjadi.
Sintaks
PKEVENT IoCreateNotificationEvent(
[in] PUNICODE_STRING EventName,
[out] PHANDLE EventHandle
);
Parameter
[in] EventName
Penunjuk ke buffer yang berisi string Unicode yang dihentikan null yang memberi nama peristiwa.
[out] EventHandle
Arahkan ke lokasi untuk mengembalikan handel kernel untuk objek peristiwa.
Nilai kembali
IoCreateNotificationEvent mengembalikan penunjuk ke objek peristiwa yang dibuat atau dibuka atau NULL jika objek peristiwa tidak dapat dibuat atau dibuka.
Keterangan
Jika objek peristiwa belum ada, IoCreateNotificationEvent membuat dan membukanya, dan mengatur statusnya ke Signaled.
Jika objek peristiwa sudah ada, IoCreateNotificationEvent hanya membuka objek peristiwa.
Peristiwa pemberitahuan dan peristiwa sinkronisasi digunakan untuk mengoordinasikan eksekusi. Namun, sementara peristiwa sinkronisasi mengatur ulang dirinya sendiri, peristiwa pemberitahuan tetap dalam status Sinyal sampai driver memanggil KeClearEvent atau KeResetEvent.
Untuk menyinkronkan pada peristiwa pemberitahuan:
- Buka peristiwa pemberitahuan dengan IoCreateNotificationEvent. Identifikasi peristiwa dengan string EventName .
- Tunggu hingga peristiwa disinyalkan dengan memanggil KeWaitForSingleObject dengan PKEVENT yang dikembalikan oleh IoCreateNotificationEvent. Lebih dari satu utas eksekusi dapat menunggu peristiwa pemberitahuan tertentu. Untuk melakukan polling alih-alih stall, tentukan Batas Waktu nol ke KeWaitForSingleObject.
- Tutup handel ke peristiwa pemberitahuan dengan ZwClose saat akses ke peristiwa tidak lagi diperlukan.
Ada dua metode utama untuk berbagi objek peristiwa:
Aplikasi mode pengguna membuat objek peristiwa dan meneruskan handel ke objek ke driver dengan mengirim IOCTL ke driver. Driver harus menangani IOCTL dalam konteks proses yang membuat objek peristiwa dan harus memvalidasi handel dengan memanggil ObReferenceObjectByHandle. Metode ini adalah metode yang direkomendasikan untuk berbagi objek peristiwa antara mode pengguna dan kernel.
Driver membuat objek peristiwa bernama di direktori objek global
\BaseNamedObjects
. Untuk mengakses peristiwa mode kernel dari mode pengguna, gunakan namaGlobal\\
Xxx. Perhatikan bahwa pengaturan keamanan dapat mencegah aplikasi membuka peristiwa.\\BaseNamedObjects
Direktori objek tidak dibuat sampai subsistem Microsoft Win32 menginisialisasi, sehingga driver yang dimuat pada waktu boot tidak dapat membuat objek peristiwa di\\BaseNamedObjects
direktori dalam rutinitas DriverEntry mereka.
Untuk informasi selengkapnya tentang peristiwa, lihat Objek Peristiwa.
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 | PASSIVE_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), IrqlIoPassive4(wdm) |