CreateSemaphoreExW

名前付きまたは名前なしのセマフォオブジェクトを作成または開き、そのオブジェクトへのハンドルを返す。(CreateSemaphoreExW)

CreateSemaphoreExW lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName, dwFlags, dwDesiredAccess

lpSemaphoreAttributes : [var] SECURITY_ATTRIBUTES 構造体へのポインタ。このパラメータが NULL の場合、セマフォハンドルは子プロセスに継承できない。
lInitialCount : [int] セマフォオブジェクトの初期カウント。この値はゼロ以上 lMaximumCount 以下でなければならない。セマフォの状態はカウントがゼロより大きいときにシグナル、ゼロのときに非シグナルとなる。待機関数がセマフォを待機していたスレッドを解放するたびにカウントは 1 減る。ReleaseSemaphore 関数を呼ぶことでカウントを指定量だけ増やせる。
lMaximumCount : [int] セマフォオブジェクトの最大カウント。この値はゼロより大きくなければならない。
lpName : [wstr] セマフォオブジェクトの名前を指定する null 終端文字列へのポインタ。名前は MAX_PATH 文字に制限される。名前比較は大文字小文字を区別する。lpName が既存の名前付きセマフォオブジェクトの名前と一致する場合、lInitialCount と lMaximumCount パラメータは作成プロセスによって既に設定されているため無視される。lpSemaphoreAttributes パラメータが NULL でない場合、ハンドルが継承可能かを決定する。lpName が NULL の場合、セマフォオブジェクトは名前なしで作成される。lpName が既存のイベント、ミューテックス、待機可能タイマ、ジョブ、またはファイルマッピングオブジェクトの名前と一致する場合、関数は失敗し GetLastError 関数は ERROR_INVALID_HANDLE を返す。これはこれらのオブジェクトが同じ名前空間を共有するために起こる。名前にはグローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global\" または "Local\" プレフィックスを付けられる。名前の残りの部分はバックスラッシュ文字 (\\) を除く任意の文字を含められる。詳細は Kernel Object Namespaces を参照。高速ユーザー切り替えはターミナルサービスセッションを使用して実装される。カーネルオブジェクト名はアプリケーションが複数ユーザーをサポートできるようターミナルサービスのガイドラインに従う必要がある。オブジェクトはプライベート名前空間に作成できる。詳細は Object Namespaces を参照。
dwFlags : [int] このパラメータは予約済みで、0 でなければならない。
dwDesiredAccess : [int] セマフォオブジェクトのアクセスマスク。アクセス権の一覧は Synchronization Object Security and Access Rights を参照。

(プラグイン / モジュール : kernel32.dll)

解説

名前付きまたは名前なしのセマフォオブジェクトを作成または開き、そのオブジェクトへのハンドルを返す。(CreateSemaphoreExW)

[戻り値]

関数が成功した場合、戻り値はセマフォオブジェクトへのハンドル。関数呼び出し前に名前付きセマフォオブジェクトが存在していた場合、関数は既存オブジェクトへのハンドルを返し、GetLastError
は ERROR_ALREADY_EXISTS を返す。関数が失敗した場合、戻り値は NULL。拡張エラー情報を取得するには
GetLastError を呼ぶ。

[備考]

セマフォオブジェクトの状態はカウントがゼロより大きいときにシグナル、カウントがゼロと等しいときに非シグナルとなる。lInitialCount
パラメータが初期カウントを指定する。カウントはゼロより小さくなることも lMaximumCount
パラメータで指定された値を超えることもない。呼び出し側プロセスの任意のスレッドは待機関数の呼び出しでセマフォオブジェクトのハンドルを指定できる。単一オブジェクト待機関数は指定オブジェクトの状態がシグナルされたときに戻る。複数オブジェクト待機関数は指定されたオブジェクトのいずれか
1
つ、またはすべてがシグナルされたときに戻るように指示できる。待機関数が戻ると、待機中のスレッドは実行を続けるために解放される。スレッドがセマフォオブジェクトの待機を完了するたびに、セマフォオブジェクトのカウントが
1 減る。スレッドが終了したら、ReleaseSemaphore
関数を呼んでセマフォオブジェクトのカウントを増やす。複数のプロセスが同じセマフォオブジェクトのハンドルを持てるので、プロセス間同期にオブジェクトを使用できる。以下のオブジェクト共有機構が利用できる:
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs