Namespaces de objeto kernel

Um servidor dos Serviços de Área de Trabalho Remota tem vários namespaces para os seguintes objetos de kernel nomeados: eventos, semáforos, mutexes, temporizadores de espera, objetos de mapeamento de arquivo e objetos de trabalho. Há um namespace global usado principalmente por serviços em aplicativos cliente/servidor. Além disso, cada sessão do cliente tem um namespace separado para esses objetos, como em Windows Vista.

Os namespaces de sessão do cliente separados permitem que vários clientes executem os mesmos aplicativos sem interferir uns com os outros. Para processos iniciados em uma sessão de cliente, o sistema usa o namespace de sessão por padrão. No entanto, esses processos podem usar o namespace global anexando o prefixo "Global\" ao nome do objeto. Por exemplo, o código a seguir chama CreateEvent e cria um objeto de evento chamado CSAPP no namespace global:

Observação

O namespace global não está disponível para aplicativos da Windows Store.

 

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

Os aplicativos de serviço em um ambiente de Serviços de Área de Trabalho Remota usam o namespace global por padrão.

A sessão zero é usada apenas para hospedar serviços e não há sessão de console, ao contrário das versões anteriores do Windows.

O namespace global permite que processos em várias sessões de cliente se comuniquem com um aplicativo de serviço. Por exemplo, um aplicativo cliente/servidor pode usar um objeto mutex para sincronização. O módulo do servidor pode criar o objeto mutex no namespace global. Em seguida, uma sessão de cliente pode usar o prefixo "Global\" para abrir o objeto mutex.

Outro uso do namespace global é para aplicativos que usam objetos nomeados para detectar que já há uma instância do aplicativo em execução no sistema em todas as sessões. Esse objeto nomeado deve ser criado ou aberto no namespace global em vez do namespace por sessão. O caso mais comum de executar o aplicativo uma vez por sessão é suportado por padrão porque o objeto nomeado é criado em um namespace por sessão.

Além do prefixo "Global\", os processos do cliente podem usar o prefixo "Local\" para criar explicitamente um objeto em seu namespace de sessão. Essas palavras-chave diferenciam maiúsculas de minúsculas.

O prefixo "Session\" é reservado para uso do sistema e você não deve usá-lo em nomes de objetos kernel.

A troca rápida de usuário é implementada usando sessões dos Serviços de Área de Trabalho Remota. O primeiro usuário a fazer logon usa a sessão um, o próximo usuário a fazer logon usa a sessão dois e assim por diante. Os nomes de objeto kernel devem seguir as diretrizes descritas para os Serviços de Área de Trabalho Remota para que os aplicativos possam dar suporte a vários usuários.

A criação de um objeto de mapeamento de arquivo no namespace global, usando CreateFileMapping, de uma sessão diferente de zero de sessão é uma operação privilegiada. Por isso, um aplicativo em execução em uma sessão de servidor arbitrária do Host de Sessão da Área de Trabalho Remota (Host de Sessão de Área de Trabalho Remota) deve ter SeCreateGlobalPrivilege habilitado para criar um objeto de mapeamento de arquivo no namespace global com êxito. A verificação de privilégios é limitada à criação de objetos de mapeamento de arquivos e não se aplica à abertura de objetos existentes. Por exemplo, se um serviço ou o sistema criar um objeto de mapeamento de arquivo, qualquer processo em execução em qualquer sessão poderá acessar esse objeto de mapeamento de arquivo, desde que o usuário tenha o acesso necessário.