名前付きまたは名前なしのセマフォオブジェクトを作成または開く。(CreateSemaphoreW)
CreateSemaphoreW lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName
lpSemaphoreAttributes : [var] SECURITY_ATTRIBUTES 構造体へのポインタ。このパラメータが NULL の場合、ハンドルは子プロセスに継承できない。構造体の lpSecurityDescriptor メンバーが新しいセマフォのセキュリティ記述子を指定する。このパラメータが NULL の場合、セマフォは既定のセキュリティ記述子を取得する。セマフォの既定セキュリティ記述子の ACL は作成者のプライマリトークンまたは impersonation トークンから取得される。 lInitialCount : [int] セマフォオブジェクトの初期カウント。この値はゼロ以上 lMaximumCount 以下でなければならない。セマフォの状態はカウントがゼロより大きいときにシグナル、ゼロのときに非シグナルとなる。待機関数がセマフォを待機していたスレッドを解放するたびにカウントは 1 減る。ReleaseSemaphore 関数を呼ぶことでカウントを指定量だけ増やせる。 lMaximumCount : [int] セマフォオブジェクトの最大カウント。この値はゼロより大きくなければならない。 lpName : [wstr] セマフォオブジェクトの名前。名前は MAX_PATH 文字に制限される。名前比較は大文字小文字を区別する。lpName が既存の名前付きセマフォオブジェクトの名前と一致する場合、この関数は SEMAPHORE_ALL_ACCESS アクセス権を要求する。この場合、lInitialCount と lMaximumCount パラメータは作成プロセスによって既に設定されているため無視される。lpSemaphoreAttributes パラメータが NULL でない場合、ハンドルが継承可能かを決定するが、セキュリティ記述子メンバーは無視される。lpName が NULL の場合、セマフォオブジェクトは名前なしで作成される。lpName が既存のイベント、ミューテックス、待機可能タイマ、ジョブ、またはファイルマッピングオブジェクトの名前と一致する場合、関数は失敗し GetLastError 関数は ERROR_INVALID_HANDLE を返す。これはこれらのオブジェクトが同じ名前空間を共有するために起こる。名前にはグローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global\" または "Local\" プレフィックスを付けられる。名前の残りの部分はバックスラッシュ文字 (\\) を除く任意の文字を含められる。詳細は Kernel Object Namespaces を参照。高速ユーザー切り替えはターミナルサービスセッションを使用して実装される。カーネルオブジェクト名はアプリケーションが複数ユーザーをサポートできるようターミナルサービスのガイドラインに従う必要がある。オブジェクトはプライベート名前空間に作成できる。詳細は Object Namespaces を参照。
(プラグイン / モジュール : kernel32.dll)
名前付きまたは名前なしのセマフォオブジェクトを作成または開く。(CreateSemaphoreW) [戻り値] 関数が成功した場合、戻り値はセマフォオブジェクトへのハンドル。関数呼び出し前に名前付きセマフォオブジェクトが存在していた場合、関数は既存オブジェクトへのハンドルを返し、GetLastError は ERROR_ALREADY_EXISTS を返す。関数が失敗した場合、戻り値は NULL。拡張エラー情報を取得するには GetLastError を呼ぶ。 [備考] CreateSemaphore が返すハンドルは SEMAPHORE_ALL_ACCESS アクセス権を持ち、呼び出し側がアクセスを許可されている限り、セマフォオブジェクトへのハンドルを必要とする任意の関数で使用できる。サービスや別ユーザーを impersonation しているスレッドからセマフォを作成する場合、作成時にセマフォにセキュリティ記述子を適用するか、作成プロセスの既定 DACL を変更して既定のセキュリティ記述子を変更する。詳細は Synchronization Object Security and Access Rights を参照。セマフォオブジェクトの状態はカウントがゼロより大きいときにシグナル、カウントがゼロと等しいときに非シグナルとなる。lInitialCount パラメータが初期カウントを指定する。カウントはゼロより小さくなることも lMaximumCount パラメータで指定された値を超えることもない。呼び出し側プロセスの任意のスレッドは待機関数の呼び出しでセマフォオブジェクトのハンドルを指定できる。単一オブジェクト待機関数は指定オブジェクトの状態がシグナルされたときに戻る。複数オブジェクト待機関数は指定されたオブジェクトのいずれか 1 つ、またはすべてがシグナルされたときに戻るように指示できる。待機関数が戻ると、待機中のスレッドは実行を続けるために解放される。スレッドがセマフォオブジェクトの待機を完了するたびに、セマフォオブジェクトのカウントが 1 減る。スレッドが終了したら、ReleaseSemaphore 関数を呼んでセマフォオブジェクトのカウントを増やす。複数のプロセスが同じセマフォオブジェクトのハンドルを持てるので、プロセス間同期にオブジェクトを使用できる。以下のオブジェクト共有機構が利用できる: (以下省略)
| プラグイン / モジュール | kernel32.dll |
| バージョン | 1.0 |
| 作成日 | 2026/04/16 |
| 著作者 | IronHSP / CsWin32 bridge |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_kernel32_gen2.hs |