ID do artigo: 169321 - Última revisão: segunda-feira, 11 de julho de 2005 - Revisão: 2.5 INFO: Ativação do COM servidores e estações do Windows NT
Nesta páginaSumárioQuando um cliente solicita um objeto de classe para uma classe registrado, COM retorna um objeto de classe existente ou inicia um processo que está registrado como contendo o objeto de classe solicitada. O processo de obtenção de uma referência de objeto de classe para um cliente solicitante (ou não que resulta na criação do processo ou "Iniciando") é chamado de "Ativação". Sob determinadas condições, COM pode iniciar um novo processo do servidor mesmo quando um objeto de classe existente está em execução e foi registrado como usar vários. Além disso, quando COM cria um novo processo que o processo pode ser iniciado em um novo ambiente de segurança conhecido como uma "estação de janela" em vez de compartilhamento de uma estação de janela existente, como a estação de janela interativa. (Para obter mais informações em estações de janela, procure a documentação do SDK do Win32 para essa frase.) Noções básicas sobre algoritmos do COM para criação de novos processos e estações de janela durante uma solicitação de ativação é importante por vários motivos. Primeiro, COM pode criar mais de uma instância de processo de um objeto de classe de uso de vários devido a problemas de segurança. Segundo, servidores de "uso único" sempre serão iniciados em processos separados, mas elas podem ou não podem ser iniciadas em estações de janela separada. Essa diferença pode se manifestar ao código do aplicativo em determinados casos incomuns, como quando dois servidores tentam se comunicar por meio de mensagens de janela ou instalações de comunicação segura, como COM ou RPC. Em terceiro lugar, como o número de estações de janela que podem ser criados simultaneamente no Windows NT é limitado, é importante saber quando o servidor COM obtém uma nova estação de janela. Este artigo examina a cenários de ativação diferente e explica quando são criadas novos processos e estações de janela. Mais InformaçõesQuando cria um novo processo de servidor COM ou atribui uma nova estação de janela para um novo processo de servidor depende de vários fatores:
Uso de várias classesUma classe de uso de vários é uma classe que está registrada com (via CoRegisterClassObject() API) especificando o sinalizador REGCLS_MULTIPLEUSE. Para classe, COM normalmente usa a mesma instância do processo do servidor para todas as solicitações de ativação do cliente. No entanto, para classes configurados para ser executado sob a segurança dos usuários iniciar e, em alguns outros casos, COM inicia uma nova instância do processo de servidor para solicitações de ativação do serviço. Quando uma nova instância do processo do servidor, portanto, é iniciada, é possível que o processo do servidor obtém uma nova estação de janela bem. Examinaremos os vários cenários abaixo, mas primeiro, abordaremos resumidamente por que COM inicia novos processos que contém objetos de classe solicitado quando uma instância do objeto de classe já está registrada como uma classe de "uso de vários".Primeiro, quando uma classe COM (com mais precisão, quando um AppID associado com uma classe COM) está registrado com o sistema para ser executado como "o usuário iniciar", o administrador do sistema definiu uma determinada diretiva de segurança com relação a essa classe. A diretiva é que um ativador deve receber um objeto de classe dentro de um processo que está executando no mesmo contexto de segurança o código de ativação. Esta diretiva de segurança pode entram em conflito com o comportamento de ter apenas um objeto de fábrica de classe para todas as solicitações de ativação (como indicado pela REGCLS_MULTIPLEUSE) definidas pelo servidor. COM prioriza a diretiva de segurança sobre o comportamento do aplicativo. Como resultado, uso de vários servidores registrados para executar como "o usuário inicia" irão se comportar não acordo com para as regras normais de uso de várias. Um novo processo será iniciado para cada entidade de segurança ativando. Em segundo lugar, se um processo não iniciado por COM sendo executado em um contexto de segurança diferente do especificado para o CLSID determinado registra esse CLSID, esse registro será fail(CoRegisterClassObject will return an error code CO_E_WRONG_SERVER_IDENTITY in this case). E, se uma solicitação de ativação mais tarde chega um novo processo será iniciado por COM o contexto de segurança especificado para o AppID/CLSID. COM não pode confiar em código chamando CoRegisterClassObject() (uma operação não segura), ele somente pode confiar em configuração do Registro (o registro é um banco de dados seguro) para determinar qual objeto de classe para uso e como executá-lo. Esse comportamento impede que a máquina ilícito falsificação de objetos de classe por usuários não autorizados. Com isso em mente, nós agora retornar à edição de novos processos e estações de janela quando são criadas quando o uso de vários servidores são iniciados pelo COM. Observe que LUID do cliente não importa de qualquer forma no caso de classe de uso de várias.
Classes de uso únicoObservação: Devem ser evitados único usar classes tanto quanto possível. Registro de uso único é uma configuração herdada e destina-se para oferecer suporte mais antigos COM aplicativos e para facilitar a portagem de aplicativos não-COM herdados para COM. É altamente recomendável que novas classes ser projetado para oferecer suporte a registro de objeto de classe de uso de várias. Isso é especialmente verdadeiro em caso de servidores com identidade "Este usuário", onde uso único classes fazer com que os exatamente opostos efeito das classes multi-use. Eles crie um novo servidor processo e nova estação de janela por ativação e, como discutimos abaixo, isso pode causar problemas de recursos no Windows NT.Uma classe de uso único é aquele que está registrado no COM (via API CoRegisterClassObject()) especificando o sinalizador REGCLS_SINGLEUSE. Para classe, COM será sempre iniciar uma nova instância do processo de servidor da classe para cada solicitação de ativação de qualquer cliente (local ou remoto). Para fins deste artigo, é a pergunta restante: quando o servidor terá uma nova estação de janela bem?
Tabela Summarizing cenários---------------------------------------------------------------------------
| Multiple-Use Server
| (class factory has requested reuse)
| Activation Modes
|-------------------------------------------------------------------
| Interactive | As "This |As "Launching | Win32
Client | User | User" | user" | service
Local | Process launched | Process | Process | Service
| in the | launched in a | launched client | started on
| interactive window| new window | window station | first
| station on first | station on | on first | activation
| activation | first | request, | request
| request, | activation | subsequent | (new winsta
| subsequent | request, | requests from | or system/
| requests get | subsequent | the same SID/ | interactive
| existing class | requests get | window station | winsta
| object, | existing class | get existing | depending
| activations fail | object | class object, no| on service
| if no user logged | | sharing of class| config),
| on locally | | objects across | subsequent
| | | window stations | requests
| | | even if same SID| get
-------| | |-----------------| existing
Remote | | | Process launched| class
| | | in new winsta on| objects
| | | first activation|
| | | request by a |
| | | SID, subsequent |
| | | remote requests |
| | | by the same SID |
| | | get existing |
| | | class object; |
| | | class launched |
| | | by local user |
| | | reused by remote|
| | | callers with |
| | | same SID |
---------------------------------------------------------------------------
| Single-Use Server
| (new process created for each activation request)
| Activation Modes
|-------------------------------------------------------------------
| Interactive | As "This |As "Launching | Win32
Client | User | User" | user" | service
Local | Process always | Process always | Process always | N/A(only
| launched in the | launched in a | launched in | one
| interactive | new window | the window | activation
| window station, | station | station of | possible)
| if no interactive | | client process |
| window station | | |
| activation fails | | |
-------| | |-----------------|
Remote | | | if both SID and |
| | | LUID of the |
| | | client match |
| | | previous client |
| | | activation, |
| | | process launched|
| | | in existing |
| | | window station, |
| | | otherwise in new|
| | | windowstation |
Estações de janela e recursos do Windows NTNesta seção examinaremos as implicações da criação de novas estações de janela no Windows NT e como que deve afetar a configuração do servidor COM. Como você verá, há um limite para o número de estações de janela que podem ser criados em um computador Windows NT. Quando esse limite for excedido, o Windows NT irá falhar uma tentativa de iniciar uma nova instância do processo do servidor por COM. Normalmente, uma mensagem de erro semelhante à seguinte aparece:Inicialização da biblioteca de vínculo dinâmico d:\WINNT\system32\kernel32.dll falha. O processo é Finalizando de forma anormal. Aviso: Usar o Editor do Registro incorretamente pode causar problemas sérios no sistema que talvez exijam a reinstalação do Windows NT para corrigi-los. Microsoft não garante que problemas resultantes do uso do Editor do Registro possam ser solucionados. Use esta ferramenta de sua responsabilidade. O valor nomeado é necessário editar aparece sob a seguinte chave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems Observação: A estação de janela pode conter várias áreas de trabalho dentro dele. Na discussão dos servidores "Iniciando o usuário" acima, sempre que a estação de trabalho do processo de cliente local mencionada, ele deve ser considerado como um formulário mais curto para "estação de janela e área de trabalho". Configuração "Iniciando o usuário" realmente é destinada a servidores ciente herdados não-DCOM e deve ser usada raramente. Esses servidores herdados esperam executar em suas próprias áreas de trabalho. Portanto, para MULTIPLEUSE "Iniciando o usuário" servidores, cada processo do cliente em uma área de trabalho diferente dentro a mesma estação de trabalho gera um novo processo de servidor a ser iniciado na área de janela estação/trabalho. Para SINGLEUSE "Iniciando o usuário" herda de servidores, novamente, o servidor windows estação/desktop do processo do cliente. No Windows NT 4.0 Service Pack 4.0, COM tentativas de reutilizar estações de janela. Antes para isso, se um servidor é definido como RunAs um usuário específico e se várias instâncias do processo do servidor são iniciadas, cada processo terá sua própria estação de janela. Isso leva a estação da janela limitações descrevem acima. No SP4, COM tentará criar todos os servidores de RunAs (ou seja, não "Ativar como ativador" ou "Iniciando usuário") definidos para execução sob o mesmo usuário identidade (ou símbolo) na estação de janela mesmo. Isso elimina a necessidade para ajustar o tamanho de heap da área de trabalho nesses casos onde vários processos do servidor executados com o mesmo token. Se, em sua configuração, todos os servidores são definidos como RunAs o mesmo usuário ou várias instâncias do mesmo processo do servidor de RunAs executar, em seguida, você deve reduzir não heapsize a área de trabalho conforme sugerido no artigo. É recomendável que você deixar o valor padrão (3 M) nesse caso. Isso ocorre porque, se você reduzir o heap da área de trabalho, em seguida, o sistema pode criar mais janela estações/áreas de trabalho; no entanto, o número de processos pode ser executado em um estação de janela/desktop se tornam cada vez menor. Por outro lado, em sua configuração, se você tiver vários servidores que executam com tokens diferentes, em seguida, você enfrentará as limitações de estação de janela. Nesse caso, você deve seguir as sugestões no artigo para reduzir o tamanho de heap da área de trabalho. ReferênciasPara obter informações adicionais sobre o problema de heap da área de trabalho, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft: 142676
(http://support.microsoft.com/kb/142676/EN-US/
)
Como corrigir erros comuns de arquivo User32.dll A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 169321
(http://support.microsoft.com/kb/169321/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início