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