Espacios de nombres de objeto kernel

Windows tiene varios espacios de nombres para los siguientes objetos de kernel con nombre: eventos, semáforos, exclusión mutua, temporizadores de espera, objetos de asignación de archivos, objetos de trabajo y objetos de vínculo simbólico. Hay un espacio de nombres global utilizado principalmente por los servicios en aplicaciones cliente/servidor. Además, cada sesión tiene un espacio de nombres independiente para estos objetos.

Los espacios de nombres de sesión independientes permiten a varios clientes ejecutar las mismas aplicaciones sin interferir entre sí. En el caso de los procesos iniciados en una sesión de cliente, el sistema usa el espacio de nombres de sesión de cliente de forma predeterminada. Sin embargo, estos procesos pueden usar el espacio de nombres global anteponiendo el prefijo "Global\" al nombre del objeto. Por ejemplo, el código siguiente llama a CreateEvent y crea un objeto de evento denominado CSAPP en el espacio de nombres global:

CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );

Las aplicaciones de servicio usan el espacio de nombres global de forma predeterminada.

Nota:

El espacio de nombres global no está disponible para las aplicaciones de la Tienda Windows.

La sesión cero solo se usa para los servicios de hospedaje y no hay ninguna sesión de consola, a diferencia de las versiones de Windows anteriores a Windows Vista.

El espacio de nombres global permite que los procesos de varias sesiones de cliente se comuniquen con una aplicación de servicio. Por ejemplo, una aplicación cliente/servidor podría usar un objeto de exclusión mutua para la sincronización. El módulo de servidor puede crear el objeto de exclusión mutua en el espacio de nombres global. A continuación, una sesión de cliente puede usar el prefijo "Global\" para abrir el objeto de exclusión mutua.

Otro uso del espacio de nombres global es para las aplicaciones que usan objetos con nombre para detectar que ya hay una instancia de la aplicación que se ejecuta en el sistema en todas las sesiones. Este objeto con nombre debe crearse o abrirse en el espacio de nombres global en lugar del espacio de nombres por sesión. El caso más común de ejecutar la aplicación una vez por sesión es compatible de forma predeterminada porque el objeto con nombre se crea en un espacio de nombres por sesión.

Además del prefijo "Global\", los procesos de cliente pueden usar el prefijo "Local\" para crear explícitamente un objeto en su espacio de nombres de sesión. Estas palabras clave distinguen mayúsculas de minúsculas.

El prefijo "Session\" está reservado para el uso del sistema y no debe usarlo en nombres de objetos kernel.

El cambio rápido de usuario se implementa mediante sesiones. El primer usuario para iniciar sesión usa la sesión uno, el siguiente usuario para iniciar sesión usa la sesión dos, etc. Los nombres de objeto de kernel deben seguir las directrices descritas para Servicios de Escritorio remoto para que las aplicaciones puedan admitir varios usuarios.

La creación de un objeto de asignación de archivos o un objeto de vínculo simbólico en el espacio de nombres global, como CreateFileMapping, desde una sesión distinta de la de la sesión cero es una operación con privilegios. Debido a esto, una aplicación debe tener SeCreateGlobalPrivilege habilitado para crear un objeto de asignación de archivos o un objeto de vínculo simbólico en el espacio de nombres global. La comprobación de privilegios se limita a la creación de estos objetos y no se aplica a la apertura de los existentes. Por ejemplo, si un servicio o el sistema crean un objeto de asignación de archivos en el espacio de nombres global, cualquier proceso que se ejecute en cualquier sesión puede tener acceso a ese objeto de asignación de archivos siempre que el proceso tenga el acceso necesario.