Compartilhar via


Nomes de objeto

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

Os nomes dos objetos event, semaphore, mutex, waitable timer, file-mapping e job 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 marcar valores retornados da 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ção OpenMutex . 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. No entanto, ao usar essa técnica para objetos mutex, nenhum dos processos de chamada deve solicitar a propriedade imediata do mutex. Se vários processos solicitarem a propriedade imediata, poderá 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 Namespaces de objeto kernel. A alternância rápida de usuário é implementada usando sessões dos Serviços de Terminal (cada usuário faz logon em uma sessão diferente). Os nomes de objeto kernel devem seguir as diretrizes descritas para os Serviços de Terminal para que os aplicativos possam dar suporte a vários usuários.

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

Usando objetos nomeados