Partilhar via


Nomes de objetos

Os objetos nomeados fornecem uma maneira fácil para os processos compartilharem identificadores de objetos. Depois que um processo cria um evento nomeado, mutex, semáforo ou objeto de temporizador, outros processos podem usar o nome para chamar a função apropriada ( OpenEvent, OpenMutex, OpenSemaphoreou OpenWaitableTimer) para abrir um identificador para o objeto. A comparação de nomes diferencia maiúsculas de minúsculas.

Os nomes de objetos de evento, semáforo, mutex, temporizador de espera, mapeamento de arquivo e trabalho compartilham o mesmo namespace. Se você tentar criar um objeto usando um nome que está em uso por um objeto de outro tipo, a função falhará e GetLastError retornará ERROR_INVALID_HANDLE. Portanto, ao criar objetos nomeados, use nomes exclusivos e certifique-se de verificar os valores de retorno de função para erros de nome duplicado.

Se você tentar criar um objeto usando um nome que está em uso por um objeto do mesmo tipo, a função terá êxito, retornando um identificador para o objeto existente e GetLastError retornará ERROR_ALREADY_EXISTS. Por exemplo, se o nome especificado em uma chamada para a função CreateMutex corresponder ao nome de um objeto mutex existente, a função retornará um identificador para o objeto existente. Nesse caso, a chamada para CreateMutex é equivalente a uma chamada para a funçãoOpenMutex. Ter vários processos usando CreateMutex para o mesmo mutex é, portanto, equivalente a ter um processo que chama CreateMutex enquanto os outros processos chamam OpenMutex, exceto que elimina a necessidade de garantir que o processo de criação seja iniciado primeiro. Ao usar essa técnica para objetos mutex, no entanto, nenhum dos processos de chamada deve solicitar a propriedade imediata do mutex. Se vários processos solicitarem propriedade imediata, pode ser difícil prever qual processo realmente obtém a propriedade inicial.

Um ambiente de Serviços de Terminal tem um namespace global para eventos, semáforos, mutexes, temporizadores de espera, objetos de mapeamento de arquivo e objetos de trabalho. Além disso, cada sessão de cliente dos Serviços de Terminal tem seu próprio namespace separado para esses objetos. Os processos de cliente dos Serviços de Terminal podem usar nomes de objeto com um prefixo "Global\" ou "Local\" para criar explicitamente um objeto no namespace global ou de sessão. Para obter mais informações, consulte Kernel Object Namespaces. A troca rápida de usuário é implementada usando sessões dos Serviços de Terminal (cada usuário faz login em uma sessão diferente). Os nomes de objeto do kernel devem seguir as diretrizes descritas para os Serviços de Terminal para que os aplicativos possam oferecer suporte a vários usuários.

Os objetos de sincronização podem ser criados em um namespace privado. Para obter mais informações, consulte Namespaces de objeto.

Usando objetos nomeados