CreateMutexExW

名前付きまたは名前なしのミューテックスオブジェクトを作成または開き、そのオブジェクトへのハンドルを返す。(Unicode)

CreateMutexExW lpMutexAttributes, lpName, dwFlags, dwDesiredAccess

lpMutexAttributes : [var] SECURITY_ATTRIBUTES 構造体へのポインタ。このパラメータが NULL の場合、ミューテックスハンドルは子プロセスに継承できない。
lpName : [wstr] ミューテックスオブジェクトの名前。名前は MAX_PATH 文字に制限される。名前比較は大文字小文字を区別する。
dwFlags : [int] このパラメータは 0 または以下の値が指定できる。
dwDesiredAccess : [int] ミューテックスオブジェクトのアクセスマスク。アクセス権の一覧は Synchronization Object Security and Access Rights を参照。

(プラグイン / モジュール : kernel32.dll)

解説

名前付きまたは名前なしのミューテックスオブジェクトを作成または開き、そのオブジェクトへのハンドルを返す。(Unicode)

[戻り値]
関数が成功した場合、戻り値は新しく作成されたミューテックスオブジェクトへのハンドル。関数が失敗した場合、戻り値は
NULL。拡張エラー情報を取得するには GetLastError
を呼ぶ。ミューテックスが名前付きミューテックスで、関数呼び出し前にオブジェクトが存在していた場合、戻り値は既存オブジェクトへのハンドルで、[GetLastError](/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror)
関数は **ERROR_ALREADY_EXISTS** を返す。

[備考]

名前付きミューテックスを使ってアプリケーションを単一インスタンスに制限する場合、悪意あるユーザーが先にそのミューテックスを作成してアプリケーションの起動を妨げる可能性がある。これを防ぐには、ランダムな名前のミューテックスを作成し、認可されたユーザーだけが取得できるように名前を保存する。代わりにこの目的でファイルを使ってもよい。ユーザーごとに
1
インスタンスに制限するには、ユーザーのプロファイルディレクトリにロックされたファイルを作成する。呼び出し側プロセスの任意のスレッドは待機関数の呼び出しでミューテックスオブジェクトのハンドルを指定できる。単一オブジェクト待機関数は指定オブジェクトの状態がシグナルされたときに戻る。複数オブジェクト待機関数は指定されたオブジェクトのいずれか
1
つ、またはすべてがシグナルされたときに戻るように指示できる。待機関数が戻ると、待機中のスレッドは実行を続けるために解放される。ミューテックスオブジェクトの状態は、どのスレッドにも所有されていないときにシグナルされる。作成スレッドは
dwFlags
パラメータでミューテックスの即時所有を要求できる。そうでない場合、スレッドは所有権を要求するために待機関数を使う必要がある。ミューテックスの状態がシグナルされると、待機中の
1 つのスレッドが所有権を得、ミューテックスの状態は非シグナルになり、待機関数は戻る。任意の時点で 1
つのスレッドしかミューテックスを所有できない。所有スレッドは ReleaseMutex
関数で所有権を解放する。ミューテックスを所有するスレッドは、同じミューテックスを繰り返し待機関数呼び出しで指定してもブロックされない。通常、同じミューテックスに対して繰り返し待機することはないが、この仕組みにより、既に所有しているミューテックスを待機してスレッドが自身をデッドロックすることを防ぐ。ただし、所有権を解放するには、スレッドはミューテックスが待機を満たした回数だけ
ReleaseMutex を呼ぶ必要がある。2 つ以上のプロセスが CreateMutex
を呼んで同じ名前付きミューテックスを作成できる。最初のプロセスが実際にミューテックスを作成し、十分なアクセス権を持つ後続のプロセスは単に既存のミューテックスへのハンドルを開く。これにより複数のプロセスが同じミューテックスのハンドルを取得でき、作成プロセスが最初に起動していることを保証する責任からユーザーを解放する。この手法を使う場合、CREATE_MUTEX_INITIAL_OWNER
フラグを使うべきではない。そうしないとどのプロセスが最初の所有権を持つかを確実にするのが難しくなる。複数のプロセスが同じミューテックスオブジェクトのハンドルを持てるので、プロセス間同期にオブジェクトを使用できる。以下のオブジェクト共有機構が利用できる:
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs