共用方式為


IoCreateSynchronizationEvent 函式 (wdm.h)

IoCreateSynchronizationEvent 例程會建立或開啟具名同步處理事件,以用於串行化存取兩個其他無關驅動程式之間的硬體。

語法

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

參數

[in] EventName

緩衝區的指標,其中包含以 Null 結尾的 Unicode 字串來命名事件。

[out] EventHandle

要傳回事件物件句柄的位置指標。 在 Windows Server 2003 和更新版本的 Windows 中,傳回的句柄是 核心句柄

傳回值

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

言論

如果事件物件不存在,就會建立它。 IoCreateSynchronizationEvent 將新同步處理事件的狀態設定為 Signaled。 如果事件對象已經存在,則只會開啟它。 使用同步處理事件呼叫的驅動程式組,KeWaitForSingleObject 此例程所傳回的 PKEVENT 指標。

當同步處理事件設定為 Signaled 狀態時,會釋放等候事件的單一執行線程,且事件會自動重設為 Not-Signaled 狀態。

若要釋放事件,驅動程式會使用事件句柄呼叫 ZwClose

在使用者模式與核心模式之間共用事件物件需要小心。 共用事件物件有兩個主要方法:

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

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

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

要求

要求 價值
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 普遍
標頭 wdm.h (包括 Ntddk.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)IrqlIoPassive4(wdm)PowerIrpDDis(wdm)

另請參閱

IoCreateNotificationEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose