<Return[C]><Top>

CreateMutex

Declare Function Api_CreateMutex& Lib "kernel32" Alias "CreateMutexA" (ByRef lpMutexAttributes As Any, ByVal bInitialOwner&, ByVal lpName$)

Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByRef lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long

名前付きまたは名前なしのミューテックス(mutually exclusive:相互排他)オブジェクトを作成または開く。

パラメータ
lpMutexAttributes
    子プロセスが、取得したハンドルを継承できるかどうかを決定する、1 個の SECURITY_ATTRIBUTES 構造体へのポインタを指定す 

    る。NULL を指定すると、子プロセスはそのハンドルを継承できない。
    Windows NT/2000:SECURITY_ATTRIBUTES 構造体の lpSecurityDescriptor メンバで、新しいミューテックスのセキュリティ記述子を

    設定する。NULL を指定すると既定のセキュリティ記述子がそのミューテックスに割り当てられる。
bInitialOwner
    ミューテックスオブジェクトの初期の所有者を指定する。

    このパラメータで TRUE を指定し、呼び出し側がミューテックスを作成していた場合、呼び出し側スレッドはそのミューテックスオブジェクトの

    所有権を取得する。FALSE を指定すると、呼び出し側スレッドはそのミューテックスの所有権を取得しない。呼び出し側がそのミューテック

    スを作成したかどうかを判断する方法については、この関数の「戻り値」を参照のこと。
lpName
    ミューテックスオブジェクトの名前を保持している、NULL で終わる文字列へのポインタを指定する。

    名前の最大の長さは、MAX_PATH 文字である。名前を比較する際に、大文字と小文字は区別される。
    lpName パラメータで既存のミューテックスオブジェクトと同じ名前を指定する場合、この関数を実行するには、そのオブジェクトに対する

    MUTEX_ALL_ACCESS アクセス権が必要である。この場合、bInitialOwner パラメータは、オブジェクトを作成したプロセスによって既に

    設定されているため、無視される。また、lpMutexAttributes パラメータが NULL ではない場合、子プロセスがハンドルを継承できるかどう

    かの指定は有効であるが、セキュリティ記述子のメンバは無視される。
    NULL を指定すると、名前なしのミューテックスが作成される。
    lpName パラメータで指定した名前が、既存のイベント、セマフォ、待機可能なタイマ、ジョブ、ファイルマッピングオブジェクトのいずれかの

    名前と一致すると、この関数は失敗し、GetLastError 関数は ERROR_INVALID_HANDLE を返す。これらのオブジェクトは、同じ名前

    空間を共有しているからである。
    Terminal Services:グローバル名前空間またはセッション名前空間でオブジェクトを明示的に作成するために、「Global\」または

    「Local\」のプレフィックスを付けることができる。名前の残りの部分は、円記号(\)を除き、任意の文字を記述できる。
    Windows 2000:Terminal Services が動作していない Windows 2000 システムでは、「Global\」と「Local\」の各プレフィックスは無

    視される。名前の残りの部分は、円記号(\)を除き、任意の文字を記述できる。
    Windows NT 4.0 以前と Windows 95/98:名前は、円記号(\)を除き、任意の文字を記述できる。

戻り値
    関数が成功すると、ミューテックスオブジェクトのハンドルが返る。

    この関数を呼び出す以前にそのミューテックスオブジェクトが存在していた場合は、この関数は既存のオブジェクトに対するハンドルに返し、

    GetLastError 関数は ERROR_ALREADY_EXISTS を返す。それ以外の場合、呼び出し側は、指定されたミューテックスを作成する。

    関数が失敗すると、NULL が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。