Partager via


Utilisation d’objets nommés

L’exemple suivant illustre l’utilisation de noms d’objets en créant et en ouvrant un mutex nommé.

Premier processus

Le premier processus utilise la fonction CreateMutex pour créer l’objet mutex. Notez que cette fonction réussit même s’il existe un objet portant le même nom.

#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;
}

Deuxième processus

Le deuxième processus utilise la fonction OpenMutex pour ouvrir un handle au mutex existant. Cette fonction échoue si un objet mutex portant le nom spécifié n’existe pas. Le paramètre d’accès demande un accès complet à l’objet mutex, ce qui est nécessaire pour que le handle soit utilisé dans l’une des fonctions d’attente.

#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;
}

Noms d’objets

Utilisation d’objets Mutex