既存の名前付きミューテックスオブジェクトをオープンして、そのハンドルを取得します。
HANDLE OpenMutexA( DWORD fdwAccess, // オブジェクトに対するアクセス要求 BOOL fbInherit, // 継承可能にするかのフラグ PCTSTR pszName // ミューテックスオブジェクトの名前 );
KERNEL32.DLL
オブジェクトに対するアクセス要求を指定します。以下の値を指定します。
0x00100000 (SYNCHRONIZE) | Windows NT/2000/XP: WaitForSingleObject などの待機関数や ReleaseMutex 関数でのミューテックスハンドルの使用を要求します。 |
0x001F0001 (MUTEX_ALL_ACCESS) | ミューテックスオブジェクトに対して可能なすべてのアクセスを要求します。 |
呼び出しプロセスによって作成された子プロセスにオブジェクトを継承させるかどうかを指定します。 1 (TRUE) を指定すると、ハンドルを継承します。 0 (FALSE) を指定すると、ハンドルを継承しません
ミューテックスオブジェクトの名前を表す文字列のアドレスを指定します。大文字・小文字が区別されます。
ターミナルサービス: ターミナルサーバでは、グローバルまたはセッションのネームスペース(名前空間)で明示的にミューテックスオブジェクトを管理させるために、 "Global\" または "Local\" のプレフィックスをつけることができます。残りの名前は、バックスラッシュ(日本語環境では円記号)「 \ 」以外のすべての文字を使用することができます。
Windows NT/2000/XP: 高速なユーザー切り替えはターミナルサービスセッションを使用して行なわれます。最初のユーザーではセッション 0 が、次のユーザーではセッション 1 が、というように使用されます。アプリケーションが複数のユーザーをサポートできるようにするには、カーネルオブジェクトの名前は、ターミナルサービスのガイドラインに従っていなければなりません。
Windows 2000: ターミナルサービスが実行されていない場合には、 "Global\" および "Local\" のプレフィックスは無視されます。残りの名前は、バックスラッシュ「 \ 」以外のすべての文字を使用することができます。
Windows NT 4.0 以前: バックスラッシュ「 \ 」以外のすべての文字を使用することができます。
Windows 95/98/Me: バックスラッシュ「 \ 」以外のすべての文字を使用することができます。空文字列 "" も、オブジェクトの名前として有効です。
成功すると、ミューテックスオブジェクトのハンドルが返ります。
失敗すると 0 (NULL) が返ります。拡張エラー情報を取得するには、 GetLastError 関数を使います。
OpenMutex 関数は、同じミューテックスオブジェクトを複数のプロセスでオープンすることができるようにします。この関数は、指定された名前のミューテックスオブジェクトがすでに CreateMutex 関数で作成されていた場合にのみ成功します。
ハンドルをクローズするには、 CloseHandle 関数を使います。プロセスの終了時には、システムが自動的にハンドルをクローズします。最後のハンドルがクローズされると、ミューテックスオブジェクトは破棄されます。
Windows 95 以降 / Windows NT 3.1 以降