IoCreateNotificationEvent 函式 (wdm.h)
IoCreateNotificationEvent 例程會建立或開啟具名通知事件,用來通知一或多個執行線程已發生事件。
語法
PKEVENT IoCreateNotificationEvent(
[in] PUNICODE_STRING EventName,
[out] PHANDLE EventHandle
);
參數
[in] EventName
緩衝區的指標,其中包含以 Null 結尾的 Unicode 字串來命名事件。
[out] EventHandle
要在其中傳回事件物件之核心句柄的位置指標。
傳回值
IoCreateNotificationEvent 會傳回已建立或開啟事件物件的指標,如果無法建立或開啟事件物件,則傳回 NULL null。
言論
如果事件物件不存在,IoCreateNotificationEvent 會建立並開啟它,並將其狀態設定為 Signaled。
如果事件對象已經存在,IoCreateNotificationEvent 只會開啟事件物件。
通知事件和同步處理事件都用來協調執行。 不過,當同步處理事件自行重設時,通知事件會維持在 Signaled 狀態,直到驅動程式呼叫 KeClearEvent 或 KeResetEvent為止。
若要同步處理通知事件:
- 使用 IoCreateNotificationEvent開啟通知事件。 使用 EventName 字串來識別事件。
- 使用 IoCreateNotificationEvent 所傳回的 PKEVENT 呼叫 KeWaitForSingleObject,等待事件發出訊號。 一個以上的執行線程可以等候指定的通知事件。 若要輪詢而不是停止,請指定零 逾時KeWaitForSingleObject。
- 當不再需要存取事件時,請使用 ZwClose 關閉通知事件的句柄。
共用事件物件有兩個主要方法:
使用者模式應用程式會建立事件物件,並將IOCTL傳送至驅動程式,將句柄傳遞至驅動程式。 驅動程式必須在建立事件對象的進程內容中處理IOCTL,而且必須呼叫 ObReferenceObjectByHandle來驗證句柄。 這個方法是用於在使用者和核心模式之間共用事件對象的建議方法。
驅動程式會在全域
\BaseNamedObjects
物件目錄中建立具名事件物件。 若要從使用者模式存取內核模式事件,請使用名稱Global\\
Xxx。 請注意,安全性設定可以防止應用程式開啟事件。 在 win32 子系統初始化Microsoft之前,不會建立\\BaseNamedObjects
對象目錄,因此在開機時載入的驅動程式無法在其 DriverEntry 例程的\\BaseNamedObjects
目錄中建立事件物件。
如需事件的詳細資訊,請參閱 事件物件。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),IrqlIoPassive4(wdm) |