既存の名前付きセマフォ オブジェクトを開きます。
構文
HANDLE OpenSemaphoreW(
[in] DWORD dwDesiredAccess,
[in] BOOL bInheritHandle,
[in] LPCWSTR lpName
);
パラメーター
[in] dwDesiredAccess
セマフォ オブジェクトへのアクセス。 指定したオブジェクトのセキュリティ記述子が呼び出し元プロセスに対して要求されたアクセスを許可しない場合、関数は失敗します。 アクセス権の一覧については、「 同期オブジェクトのセキュリティとアクセス権」を参照してください。
[in] bInheritHandle
この値が TRUE の場合、このプロセスによって作成されたプロセスはハンドルを継承します。 それ以外の場合、プロセスはこのハンドルを継承しません。
[in] lpName
開くセマフォの名前。 名前の比較では、大文字と小文字が区別されます。
この関数は、プライベート名前空間内のオブジェクトを開くことができます。 詳細については、「 オブジェクト名前空間」を参照してください。
ターミナル サービス: 名前には、グローバル名前空間またはセッション名前空間内のオブジェクトを明示的に開くために、"Global" または "Local" プレフィックスを付けることができます。 名前の残りの部分には、円記号 (\) を除く任意の文字を含めることができます。 詳細については、「 カーネル オブジェクトの名前空間」を参照してください。
メモ 高速ユーザー切り替えは、ターミナル サービス セッションを使用して実装されます。 最初にログオンするユーザーはセッション 0 を使用し、次にログオンするユーザーはセッション 1 を使用します。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関して説明されているガイドラインに従う必要があります。
戻り値
関数が成功した場合、戻り値はセマフォ オブジェクトへのハンドルです。
関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
OpenSemaphore 関数を使用すると、複数のプロセスで同じセマフォ オブジェクトのハンドルを開きます。 関数は、 CreateSemaphore 関数を使用してセマフォが既に作成されているプロセスがある場合にのみ成功します。 呼び出し元のプロセスでは、dwDesiredAccess パラメーターで指定されたアクセスの制限に従って、待機関数などのセマフォ オブジェクトへのハンドルを必要とする任意の関数で、返されたハンドルを使用できます。
ハンドルは DuplicateHandle 関数を使用して複製できます。 CloseHandle 関数を使用してハンドルを閉じます。 プロセスが終了すると、ハンドルが自動的に閉じられます。 セマフォ オブジェクトは、最後のハンドルが閉じられたときに破棄されます。
要件
| サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
| サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
| 対象プラットフォーム | Windows |
| ヘッダー | synchapi.h (Windows.h を含む) |
| Library | Kernel32.lib |
| [DLL] | Kernel32.dll |