IoCreateNotificationEvent 函式 (wdm.h)

IoCreateNotificationEvent 例程會建立或開啟具名通知事件,用來通知一或多個線程執行事件已發生。

語法

PKEVENT IoCreateNotificationEvent(
  [in]  PUNICODE_STRING EventName,
  [out] PHANDLE         EventHandle
);

參數

[in] EventName

緩衝區的指標,其中包含名稱為事件的 Null 終止 Unicode 字串。

[out] EventHandle

要在其中傳回事件物件核心句柄的位置指標。

傳回值

IoCreateNotificationEvent 會傳回建立或開啟之事件物件的指標,如果無法建立或開啟事件物件,則為 NULL

備註

如果事件物件不存在, IoCreateNotificationEvent 會建立並開啟它,並將其狀態設定為 Signaled。

如果事件對象已經存在, IoCreateNotificationEvent 只會開啟事件物件。

通知事件和同步處理事件都是用來協調執行。 不過,當同步處理事件自行重設時,通知事件會維持在 Signaled 狀態,直到驅動程式呼叫 KeClearEventKeResetEvent 為止。

若要同步處理通知事件:

  1. 使用 IoCreateNotificationEvent 開啟通知事件。 使用 EventName 字串識別事件。
  2. 等候呼叫 KeWaitForSingleObject 並透過 IoCreateNotificationEvent 傳回的 PKEVENT 來發出訊號。 一個以上的執行線程可以等候指定的通知事件。 若要輪詢而不是停止,請將零的 逾時 指定為 KeWaitForSingleObject
  3. 當不再需要存取事件時,請使用 ZwClose 關閉通知事件的句柄。

共用事件物件有兩個主要方法:

  • 使用者模式應用程式會建立事件物件,並將句柄傳遞至驅動程式,方法是將IOCTL傳送至驅動程式。 驅動程式必須在建立事件對象的進程內容中處理IOCTL,而且必須呼叫 ObReferenceObjectByHandle 來驗證句柄。 此方法是共用使用者與核心模式之間事件對象的建議方法。

  • 驅動程式會在全域 \BaseNamedObjects 對象目錄中建立具名事件物件。 若要從使用者模式存取核心模式事件,請使用名稱 Global\\Xxx。 請注意,安全性設定可防止應用程式開啟事件。 \\BaseNamedObjects對象目錄在 Microsoft Win32 子系統初始化之前不會建立,因此在開機時載入的驅動程式無法在其 DriverEntry 例程的\\BaseNamedObjects目錄中建立事件物件。

如需事件的詳細資訊,請參閱 事件物件

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlIoPassive4 (wdm)

另請參閱

IoCreateSynchronizationEvent

KeClearEvent

KeResetEvent

KeSetEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose