オブジェクト名
名前付きオブジェクトは、プロセスでオブジェクト ハンドルを簡単に共有する方法を提供します。 プロセスが名前付きイベント、ミューテックス、セマフォ、またはタイマー オブジェクトを作成した後、他のプロセスは名前を使用して適切な関数 ( OpenEvent、 OpenMutex、 OpenSemaphore、または OpenWaitableTimer) を呼び出して、オブジェクトへのハンドルを開くことができます。 名前の比較では大文字と小文字が区別されます。
イベント、セマフォ、ミューテックス、待機可能タイマー、ファイル マッピング、およびジョブ オブジェクトの名前は、同じ名前空間を共有します。 別の型のオブジェクトで使用されている名前を使用してオブジェクトを作成しようとすると、関数は失敗し、 GetLastError は ERROR_INVALID_HANDLEを返します。 したがって、名前付きオブジェクトを作成するときは、一意の名前を使用し、重複名エラーに対して関数の戻り値を必ずチェックしてください。
同じ型のオブジェクトで使用されている名前を使用してオブジェクトを作成しようとすると、関数は成功し、既存のオブジェクトへのハンドルを返し、 GetLastError は ERROR_ALREADY_EXISTSを返します。 たとえば、 CreateMutex 関数の呼び出しで指定された名前が既存のミューテックス オブジェクトの名前と一致する場合、関数は既存のオブジェクトへのハンドルを返します。 この場合、 CreateMutex の呼び出しは OpenMutex 関数の呼び出しと同じです。 したがって、同じミューテックスに対して複数のプロセスで CreateMutex を使用することは、 CreateMutex を呼び出す 1 つのプロセスと同じですが、他のプロセスは OpenMutex を呼び出しますが、作成プロセスを最初に開始する必要がなくなります。 ただし、ミューテックス オブジェクトに対してこの手法を使用する場合、呼び出し元のプロセスはミューテックスの即時所有権を要求する必要はありません。 複数のプロセスが即時所有権を要求する場合、最初の所有権を実際に取得するプロセスを予測するのは困難な場合があります。
ターミナル サービス環境には、イベント、セマフォ、ミューテックス、待機可能タイマー、ファイル マッピング オブジェクト、およびジョブ オブジェクトのグローバル名前空間があります。 さらに、各ターミナル サービス クライアント セッションには、これらのオブジェクトに対して独自の名前空間があります。 ターミナル サービス クライアント プロセスでは、"Global\" または "Local\" プレフィックスを持つオブジェクト名を使用して、グローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成できます。 詳細については、「 カーネル オブジェクトの名前空間」を参照してください。 高速ユーザー切り替えは、ターミナル サービス セッションを使用して実装されます (各ユーザーは異なるセッションにログインします)。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関して説明されているガイドラインに従う必要があります。
同期オブジェクトは、プライベート名前空間に作成できます。 詳細については、「 オブジェクト名前空間」を参照してください。
関連トピック