次の方法で共有


IoCreateSynchronizationEvent 関数 (wdm.h)

IoCreateSynchronizationEvent ルーチンは、関連付けられていない 2 つのドライバー間のハードウェアへのアクセスのシリアル化に使用する名前付き同期イベントを作成または開きます。

構文

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

パラメーター

[in] EventName

イベントに名前を付ける null で終わる Unicode 文字列を含むバッファーへのポインター。

[out] EventHandle

イベント オブジェクトのハンドルを返す場所へのポインター。 Windows Server 2003 以降のバージョンの Windows では、返されるハンドルは カーネル ハンドルです。

戻り値

IoCreateSynchronizationEvent は、作成または開かれたイベント オブジェクトへのポインターを返すか、イベント オブジェクトを作成または開けなかった場合は NULL します。

備考

イベント オブジェクトがまだ存在しない場合は作成されます。 IoCreateSynchronizationEvent 、新しい同期イベントの状態を Signaled に設定します。 イベント オブジェクトが既に存在する場合は、単純に開かれます。 KeWaitForSingleObject 同期イベント呼び出しを使用するドライバーのペアは、このルーチンによって返される PKEVENT ポインターと します。

同期イベントが Signaled 状態に設定されると、イベントを待機していた 1 つの実行スレッドが解放され、イベントは自動的に Not-Signaled 状態にリセットされます。

イベントを解放するために、ドライバーはイベント ハンドル ZwClose を呼び出します。

ユーザー モードとカーネル モードの間でイベント オブジェクトを共有するには、注意が必要です。 イベント オブジェクトを共有するには、主に次の 2 つの方法があります。

  • ユーザー モード アプリケーションは、イベント オブジェクトを作成し、IOCTL をドライバーに送信することによって、ドライバーにオブジェクトにハンドルを渡します。 ドライバーは、イベント オブジェクトを作成したプロセスのコンテキストで IOCTL を処理する必要があり、ObReferenceObjectByHandleを呼び出すことによってハンドルを検証する必要があります。 このメソッドは、ユーザー モードとカーネル モードの間でイベント オブジェクトを共有する場合に推奨される方法です。

  • ドライバーは、グローバル \BaseNamedObjects オブジェクト ディレクトリに名前付きイベント オブジェクトを作成します。 ユーザー モードからカーネル モード イベントにアクセスするには、XxxGlobal\\名前を使用します。 セキュリティ設定により、アプリケーションがイベントを開くことができない可能性があることに注意してください。 \BaseNamedObjects オブジェクト ディレクトリは、Microsoft Win32 サブシステムが初期化されるまで作成されないため、起動時に読み込まれるドライバーは、DriverEntry ルーチンの \BaseNamedObjects ディレクトリにイベント オブジェクトを作成できません

イベントの詳細については、「イベント オブジェクトの」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Ntddk.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 する HwStorPortProhibitedDDDIs(storport), IrqlIoPassive4(wdm), PowerIrpDDis(wdm)

関連項目

IoCreateNotificationEvent

KeWaitForSingleObject する

RtlInitUnicodeString する

ZwClose