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, exclusión mutua, temporizadores de espera, objetos de asignación de archivos y objetos de trabajo. Hay un espacio de nombres global utilizado principalmente por 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 que varios clientes ejecuten las mismas aplicaciones sin interferir entre sí. Para 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 Windows aplicaciones de la Tienda.

 

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

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

La sesión cero solo se usa para hospedar servicios 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 usuario se implementa mediante sesiones de Servicios de Escritorio remoto. 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 que se describen en 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 la apertura de las existentes. Por ejemplo, si un servicio o el sistema crea 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.