Espacios de nombres de objeto kernel

Un servidor de Servicios de Escritorio remoto tiene varios espacios de nombres para los siguientes objetos kernel con nombre: eventos, semáforos, exclusiones mutuas, temporizadores de espera, objetos de asignación de archivos y objetos de trabajo. Hay un espacio de nombres global que usan principalmente los servicios en aplicaciones cliente/servidor. Además, cada sesión de cliente tiene un espacio de nombres independiente para estos objetos, como en Windows Vista.

Los espacios de nombres de sesión de cliente 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 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:

Nota

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

 

CreateEvent( NULL, FALSE, FALSE, "Global\\CSAPP" );

Las aplicaciones de servicio de un entorno de Servicios de Escritorio remoto usan el espacio de nombres global de forma predeterminada.

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 anteriores de Windows.

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 uso del sistema y no debe usarlo en nombres de objetos kernel.

El cambio rápido de usuarios se implementa mediante sesiones de Servicios de Escritorio remoto. El primer usuario en 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 en el espacio de nombres global, mediante CreateFileMapping, desde una sesión distinta de la sesión cero es una operación con privilegios. Por este motivo, una aplicación que se ejecuta en una sesión arbitraria del servidor host de sesión de Escritorio remoto (host de sesión de Escritorio remoto) debe tener habilitada SeCreateGlobalPrivilege para crear correctamente un objeto de asignación de archivos en el espacio de nombres global. La comprobación de privilegios se limita a la creación de objetos de asignación de archivos y no se aplica a abrir las existentes. Por ejemplo, si un servicio o el sistema crean un objeto de asignación de archivos, cualquier proceso que se ejecute en cualquier sesión puede tener acceso a ese objeto de asignación de archivos siempre que el usuario tenga el acceso necesario.