Bagikan melalui


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:

  1. Buka peristiwa pemberitahuan dengan IoCreateNotificationEvent. Identifikasi peristiwa dengan string EventName .
  2. 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.
  3. 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 nama Global\\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)

Lihat juga

IoCreateSynchronizationEvent

KeClearEvent

KeResetEvent

KeSetEvent

KeWaitForsingleObject

RtlInitUnicodeString

ZwClose