Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Além de ser executado como um executável de servidor local (EXE), um objeto COM também pode empacotar-se para ser executado como um aplicativo de serviço quando ativado por um cliente local ou remoto. Os serviços suportam vários recursos administrativos úteis e integrados à interface do usuário, incluindo início, parada, pausa e reinicialização locais e remotos, bem como a capacidade de estabelecer o servidor para ser executado em uma conta de usuário específica e estação de janela.
Um objeto escrito como um serviço é instalado para uso por COM ao estabelecer um valor LocalService na sua chave AppID e realizar uma instalação de serviço padrão.
As classes também podem ser configuradas para serem executadas em uma conta de usuário específica quando ativadas por um cliente remoto sem serem escritas como um aplicativo de serviço. Para fazer isso, a classe instala um nome de usuário e uma senha para ser usado quando o SCM inicia seu processo de servidor local.
Quando uma classe é configurada dessa maneira, as chamadas para CoRegisterClassObject com esse CLSID falharão, a menos que o processo tenha sido iniciado pela COM em nome de uma solicitação de ativação real. Em outras palavras, as classes configuradas para serem executadas como um usuário específico não podem ser registradas sob qualquer outra identidade.
O nome de utilizador é obtido do valor nomeado RunAs sob a chave APPID da classe. Se o nome de usuário for "Usuário interativo", o código de classe será executado no contexto de segurança do usuário conectado no momento e será conectado à estação de janela interativa.
Caso contrário, a senha é recuperada de uma parte oculta do registro disponível apenas para administradores da máquina e para o sistema. O nome de usuário e a senha são usados para criar uma sessão de logon na qual o código de classe é executado. Quando iniciado dessa forma, o código de classe é executado com sua própria área de trabalho e estação de janela e não compartilha identificadores de janela, a área de transferência ou outros elementos da interface do usuário com o usuário interativo ou outras classes em execução em outras contas de usuário.
Um servidor registrado com LocalService ou RunAs pode registrar um objeto na tabela de objetos em execução para permitir que qualquer cliente se conecte a ele. Para fazer isso, a chamada do servidor para IRunningObjectTable::Register deve definir o sinalizador ROTFLAGS_ALLOWANYCLIENT. Um servidor que configure esse bit deve ter o seu nome executável na secção AppID do Registo que se refere ao AppID correspondente ao executável. Um servidor "ativar como ativador" (não registrado como LocalService ou RunAs) não pode registrar um objeto com este indicador.
Tópicos relacionados