次の方法で共有


CreateEventW 関数 (synchapi.h)

名前付きまたは名前のないイベント オブジェクトを作成または開きます。

オブジェクトのアクセス マスクを指定するには、CreateEventEx 関数を使用します。

構文

HANDLE CreateEventW(
  [in, optional] LPSECURITY_ATTRIBUTES lpEventAttributes,
  [in]           BOOL                  bManualReset,
  [in]           BOOL                  bInitialState,
  [in, optional] LPCWSTR               lpName
);

パラメーター

[in, optional] lpEventAttributes

SECURITY_ATTRIBUTES 構造体へのポインター。 このパラメーターが NULL場合、子プロセスでハンドルを継承することはできません。

構造体の lpSecurityDescriptor メンバーは、新しいイベントの セキュリティ記述子 を指定します。 lpEventAttributes NULL場合、イベントは既定のセキュリティ記述子を取得します。 イベントの既定のセキュリティ記述子の ACL は、作成者のプライマリ トークンまたは偽装トークンから取得されます。

[in] bManualReset

このパラメーターが TRUE場合、この関数は手動リセット イベント オブジェクトを作成します。このオブジェクトでは、ResetEvent 関数を使用して、イベントの状態を非署名に設定する必要があります。 このパラメーターが FALSE場合、この関数は自動リセット イベント オブジェクトを作成し、1 つの待機中のスレッドが解放された後、システムによってイベント状態が自動的に非署名にリセットされます。

[in] bInitialState

このパラメーターが TRUE場合、イベント オブジェクトの初期状態が通知されます。それ以外の場合は、非署名です。

[in, optional] lpName

イベント オブジェクトの名前。 名前は MAX_PATH 文字に制限されています。 名前の比較では大文字と小文字が区別されます。

lpName が既存の名前付きイベント オブジェクトの名前と一致する場合、この関数は EVENT_ALL_ACCESS アクセス権を要求します。 この場合、bManualReset および bInitialState パラメーター は、作成プロセスによって既に設定されているため、無視されます。 lpEventAttributes パラメーターが NULLされていない場合、ハンドルを継承できるかどうかを判断しますが、そのセキュリティ記述子メンバーは無視されます。

lpName NULL場合、イベント オブジェクトは名前なしで作成されます。

lpName 、同じ名前空間内の別の種類のオブジェクトの名前 (既存のセマフォ、ミューテックス、待機可能タイマー、ジョブ、ファイル マッピング オブジェクトなど) と一致する場合、関数は失敗し、GetLastError 関数は ERROR_INVALID_HANDLEを返します。 これは、これらのオブジェクトが同じ名前空間を共有しているために発生します。

名前には、グローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global" または "Local" プレフィックスを付けることができます。 名前の残りの部分には、円記号 (\) を除く任意の文字を含めることができます。 詳細については、「カーネル オブジェクト名前空間を参照してください。 高速ユーザー切り替えは、ターミナル サービス セッションを使用して実装されます。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関して概説されているガイドラインに従う必要があります。

オブジェクトはプライベート名前空間に作成できます。 詳細については、「オブジェクト名前空間の」を参照してください。

戻り値

関数が成功した場合、戻り値はイベント オブジェクトへのハンドルです。 関数呼び出しの前に名前付きイベント オブジェクトが存在する場合、関数は既存のオブジェクトへのハンドルを返し、GetLastError ERROR_ALREADY_EXISTSを返します。

関数が失敗した場合、戻り値は NULL。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

CreateEvent によって返されるハンドルには、EVENT_ALL_ACCESS アクセス権があります。呼び出し元にアクセス権が付与されている場合は、イベント オブジェクトへのハンドルを必要とする任意の関数で使用できます。 イベントがサービスまたは別のユーザーを偽装しているスレッドから作成された場合は、イベントの作成時にセキュリティ記述子を適用するか、既定の DACL を変更して作成プロセスの既定のセキュリティ記述子を変更できます。 詳細については、「同期オブジェクトのセキュリティとアクセス権のを する」を参照してください。

呼び出し元プロセスの任意のスレッドは、のいずれかの 待機関数の呼び出しでイベント オブジェクト ハンドルを指定できます。 指定したオブジェクトの状態が通知されると、単一オブジェクト待機関数が返されます。 複数オブジェクト待機関数は、いずれか 1 つ、または指定されたすべてのオブジェクトが通知されたときに返すように指示できます。 待機関数が戻ると、待機中のスレッドが解放され、実行が続行されます。

イベント オブジェクトの初期状態は、bInitialState パラメーターによって指定されます。 SetEvent 関数を使用して、イベント オブジェクトの状態をシグナル通知に設定します。 ResetEvent 関数を使用して、イベント オブジェクトの状態を非署名にリセットします。

手動リセット イベント オブジェクトの状態が通知されると、ResetEvent 関数によって非署名に明示的にリセットされるまで、通知されたままになります。 任意の数の待機中のスレッド、または指定されたイベント オブジェクトの待機操作をその後開始するスレッドは、オブジェクトの状態が通知されている間に解放できます。

自動リセット イベント オブジェクトの状態が通知されると、1 つの待機中のスレッドが解放されるまで通知されたままになります。その後、システムは自動的に状態を非署名状態にリセットします。 待機しているスレッドがない場合、イベント オブジェクトの状態はシグナル状態のままです。

複数のプロセスが同じイベント オブジェクトのハンドルを持つ可能性があり、プロセス間同期にオブジェクトを使用できます。 次のオブジェクト共有メカニズムを使用できます。

  • CreateProcess 関数によって作成された子プロセスは、lpEventAttributes が CreateEvent の パラメーター 継承を有効にした場合、イベント オブジェクト ハンドルを継承できます。
  • プロセスでは、DuplicateHandle 関数の呼び出しでイベント オブジェクト ハンドルを指定して、別のプロセスで使用できる重複するハンドルを作成できます。
  • プロセスでは、OpenEvent または CreateEvent 関数の呼び出しでイベント オブジェクトの名前 指定できます。
CloseHandle 関数を使用してハンドルを閉じます。 プロセスが終了すると、システムはハンドルを自動的に閉じます。 イベント オブジェクトは、最後のハンドルが閉じられたときに破棄されます。

CreateEvent使用する例については、「イベント オブジェクトの使用 」を参照してください。

手記

synchapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CreateEvent を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー synchapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

CloseHandle の

CreateEventEx の

CreateProcess の

DuplicateHandle の

イベント オブジェクト

オブジェクト名の

OpenEvent

ResetEvent の

SECURITY_ATTRIBUTES

SetEvent の

同期関数の