Compartir a través de


Nombres de objeto

Los objetos con nombre proporcionan una manera sencilla para que los procesos compartan identificadores de objeto. Una vez que un proceso ha creado un evento con nombre, una exclusión mutua, un semáforo o un objeto de temporizador, otros procesos pueden usar el nombre para llamar a la función adecuada ( OpenEvent, OpenMutex, OpenSemaphore o OpenWaitableTimer) para abrir un identificador en el objeto. La comparación de nombres distingue mayúsculas de minúsculas.

Los nombres de los objetos event, semaphore, mutex, waitable timer, file-mapping y job comparten el mismo espacio de nombres. Si intenta crear un objeto con un nombre que está en uso por un objeto de otro tipo, se produce un error en la función y GetLastError devuelve ERROR_INVALID_HANDLE. Por lo tanto, al crear objetos con nombre, use nombres únicos y asegúrese de comprobar los valores devueltos por la función en busca de errores de nombre duplicado.

Si intenta crear un objeto con un nombre que está en uso por un objeto del mismo tipo, la función se realiza correctamente, devuelve un identificador al objeto existente y GetLastError devuelve ERROR_ALREADY_EXISTS. Por ejemplo, si el nombre especificado en una llamada a la función CreateMutex coincide con el nombre de un objeto de exclusión mutua existente, la función devuelve un identificador al objeto existente. En este caso, la llamada a CreateMutex equivale a una llamada a la función OpenMutex . Tener varios procesos usa CreateMutex para la misma exclusión mutua es equivalente a tener un proceso que llama a CreateMutex mientras que los demás procesos llaman a OpenMutex, salvo que elimina la necesidad de asegurarse de que el proceso de creación se inicia primero. Sin embargo, cuando se usa esta técnica para objetos de exclusión mutua, ninguno de los procesos de llamada debe solicitar la propiedad inmediata de la exclusión mutua. Si varios procesos solicitan la propiedad inmediata, puede ser difícil predecir qué proceso obtiene realmente la propiedad inicial.

Un entorno de Terminal Services tiene un espacio de nombres global para eventos, semáforos, exclusiones mutuas, temporizadores de espera, objetos de asignación de archivos y objetos de trabajo. Además, cada sesión de cliente de Terminal Services tiene su propio espacio de nombres independiente para estos objetos. Los procesos de cliente de Terminal Services pueden usar nombres de objeto con un prefijo "Global\" o "Local\" para crear explícitamente un objeto en el espacio de nombres global o de sesión. Para obtener más información, vea Espacios de nombres de objeto kernel. El cambio rápido de usuario se implementa mediante sesiones de Terminal Services (cada usuario inicia sesión en una sesión diferente). Los nombres de objeto de kernel deben seguir las directrices descritas para Terminal Services para que las aplicaciones puedan admitir varios usuarios.

Los objetos de sincronización se pueden crear en un espacio de nombres privado. Para obtener más información, vea Espacios de nombres de objeto.

Usar objetos con nombre