名前付きオブジェクトの使用

次の例では、名前付きミューテックスを作成して開くことで 、オブジェクト名 を使用する方法を示します。

最初のプロセス

最初のプロセスでは、 CreateMutex 関数を使用してミューテックス オブジェクトを作成します。 同じ名前の既存のオブジェクトがある場合でも、この関数は成功します。

#include <windows.h>
#include <stdio.h>
#include <conio.h>

// This process creates the mutex object.

int main(void)
{
    HANDLE hMutex; 

    hMutex = CreateMutex( 
        NULL,                        // default security descriptor
        FALSE,                       // mutex not owned
        TEXT("NameOfMutexObject"));  // object name

    if (hMutex == NULL) 
        printf("CreateMutex error: %d\n", GetLastError() ); 
    else 
        if ( GetLastError() == ERROR_ALREADY_EXISTS ) 
            printf("CreateMutex opened an existing mutex\n"); 
        else printf("CreateMutex created a new mutex.\n");

    // Keep this process around until the second process is run
    _getch();

    CloseHandle(hMutex);

    return 0;
}

2 番目のプロセス

2 番目のプロセスでは 、OpenMutex 関数を使用して、既存のミューテックスへのハンドルを開きます。 指定した名前のミューテックス オブジェクトが存在しない場合、この関数は失敗します。 アクセス パラメーターはミューテックス オブジェクトへのフル アクセスを要求します。これは、待機関数のいずれかでハンドルを使用するために必要です。

#include <windows.h>
#include <stdio.h>

// This process opens a handle to a mutex created by another process.

int main(void)
{
    HANDLE hMutex; 

    hMutex = OpenMutex( 
        MUTEX_ALL_ACCESS,            // request full access
        FALSE,                       // handle not inheritable
        TEXT("NameOfMutexObject"));  // object name

    if (hMutex == NULL) 
        printf("OpenMutex error: %d\n", GetLastError() );
    else printf("OpenMutex successfully opened the mutex.\n");

    CloseHandle(hMutex);

    return 0;
}

オブジェクト名

ミューテックス オブジェクトの使用