Artigo: 169321 - Última revisão: segunda-feira, 11 de Julho de 2005 - Revisão: 2.5 INFO: COM activação de servidores e estações de Windows NT
Nesta páginaSumárioQuando um cliente pede um objecto de classe para uma classe registado, COM devolve um objecto de classe existente ou inicia um processo que está registado como contendo o objecto de classe pedida. O processo de obtenção de uma referência de objecto de classe para um cliente que efectua o pedido (ou não que resulta num processo de criação ou "Iniciar") é chamado de "Activação". Em determinadas circunstâncias, COM poderá iniciar um novo processo de servidor, mesmo quando um objecto de classe existente está a ser executado e foi registado como utilizar vários. Além disso, quando COM cria um novo processo esse processo pode ser iniciado num ambiente de segurança nova conhecido como "uma estação" em vez de partilha de uma estação existente como a estação interactivo. (Para mais informações em estações de janela, procure documentação do Win32 SDK para essa expressão.) É importante compreender algoritmos do COM para criação de novos processos e estações de janela durante um pedido de activação por diversas razões. Em primeiro lugar, COM poderá criar instância de processo mais de um objecto de classe de utilização de múltiplas devido a problemas de segurança. Em segundo lugar, "utilização única" servidores sempre serão iniciados em processos separados, mas podem ou não podem ser iniciados numa janela separada estações. Esta diferença pode manifestar-se ao código de aplicação em determinados casos invulgares, tais como quando dois servidores COM tentam comunicar através de mensagens de janela ou instalações de comunicação segura como COM ou RPC. Em terceiro lugar, uma vez que o número de estações de janela em simultâneo podem ser criados no Windows NT é limitado, é importante saber quando o servidor COM obtém uma nova estação. Este artigo examina cenários diferentes de activação e explica quando são criadas novos processos e estações de janela. Mais InformaçãoQuando COM cria um novo processo de servidor ou atribui uma nova estação para um novo processo de servidor depende de vários factores:
Utilização de várias classesUma classe de utilização de múltiplos é uma classe que está registada COM (através de API de CoRegisterClassObject()) especificar o sinalizador REGCLS_MULTIPLEUSE. Classe, COM utiliza normalmente a mesma instância do processo do servidor para todos os pedidos de activação de cliente. No entanto, para classes configuradas para ser executado a segurança dos utilizadores inicia e alguns outros casos, COM inicia uma nova instância do processo do servidor a pedidos de activação do serviço. Quando uma nova instância do processo do servidor, assim, é iniciada, é possível que o processo do servidor é uma nova estação bem. Irá examinar as várias situações, mas primeiro irá explicar brevemente porque COM inicia novos processos com objectos de classe pedida quando uma instância do objecto classe já está registada como uma classe "utilização de múltiplas".Primeiro, quando uma classe COM (com mais precisão, quando um AppID associado com uma classe COM) está registado com o sistema para ser executado como "o utilizador inicia", o administrador do sistema definiu uma determinada política de segurança relativamente a essa classe. A política é se um activador deve receber um objecto de classe dentro de um processo em execução no contexto de segurança mesmo que o código activating. Esta política de segurança pode resultar em conflito com o comportamento definidas pelo servidor de ter apenas um objecto de fábrica de classe para todos os pedidos de activação (como indicado pela REGCLS_MULTIPLEUSE). COM prioritizes a política de segurança sobre o comportamento da aplicação. Como resultado, utilização de múltiplos servidores registados para ser executado como "o utilizador inicia" não funcionarão acordo com para as regras normais de utilização de múltiplas. Será iniciado um novo processo para cada activating principal de segurança. Em segundo lugar, se um processo não são iniciado pelo COM executado num contexto segurança diferente daquele especificado para o CLSID especificado regista esse CLSID, esse registo irá fail(CoRegisterClassObject will return an error code CO_E_WRONG_SERVER_IDENTITY in this case). E, se um pedido de activação posteriormente chega um novo processo será iniciado por COM o contexto de segurança especificado para o CLSID/AppID. COM não é possível confiança código chamar CoRegisterClassObject() (uma operação não segura), só pode confiar a definição de registo (o registo é uma base de dados segura) para determinar o objecto de classe a utilizar e como executá-la. Este comportamento impede ilícitas globais fraude de objectos de classe de utilizadores não autorizados. Com que não se esqueça, é agora volta para o problema de quando novos processos e estações de janela são criadas quando a utilização de múltiplos servidores são iniciadas pelo COM. Repare que não é importante LUID do cliente de qualquer forma no caso de classe de utilização de múltiplas.
Classes de utilização únicaNOTA: Só utilizar classes devem ser evitadas quanto possível. Registo de utilização única é uma definição legacy e destina-se para suportar aplicações COM mais antigas e para facilitar a migrar aplicações não COM legacy para COM. É vivamente recomendado que novas classes ser concebido para suportar registo de objecto de classe de utilização de múltiplas. Isto ocorre especialmente no caso de servidores com identidade 'Este utilizador', onde causar exactamente oposto efeito das classes multi-use classes de utilização única. Se criarem um novo servidor processo e nova estação por activação e, à medida que abordam abaixo, isto pode causar problemas de recursos no Windows NT.Uma classe de utilização única é aquele que está registado COM (através de API CoRegisterClassObject()) especificar o sinalizador REGCLS_SINGLEUSE. Para classe, COM sempre iniciar uma nova instância de processo do servidor a classe para cada pedido de activação de qualquer cliente (local ou remoto). Para efeitos deste artigo, pergunta restante é: quando o servidor terá uma nova estação 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 secção irá examinar as implicações de criação de novas estações de janela no Windows NT e como que deverá afectar a configuração do servidor COM. Como verá, existe um limite para o número de estações de janela que pode ser criado num computador Windows NT. Quando esse limite é excedido, o Windows NT irá falhar uma tentativa por COM para iniciar uma nova instância do processo do servidor. Normalmente, é apresentada uma mensagem de erro semelhante ao seguinte:Inicialização da biblioteca de ligação dinâmica d:\winnt\system32\kernel32.dll falhou. O processo terminar irregularmente. Aviso: A utilização incorrecta do Editor de registo pode causar problemas sérios, todo o sistema que poderão forçar a reinstalação do Windows NT. Microsoft não garante que os problemas resultantes da utilização do Editor de registo podem ser resolvidos. Utilize esta ferramenta por sua conta e risco. O valor com nome tem de editar aparece na seguinte chave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems NOTA: A estação pode conter vários ambientes de trabalho nele. Num debate de servidores de 'Utilizador executar' acima, sempre que a estação do processo de cliente local é mencionada, deve ser considerada como um formulário mais curto para "estação e ambiente de trabalho". "A iniciar o utilizador" definição destina-se realmente para os servidores utilizem não DCOM legacy e deve ser utilizada raramente. Estes servidores legacy esperar executar os seus próprios computadores de secretária. Assim, para MULTIPLEUSE "Utilizador executar" servidores, cada cliente processo no ambiente de trabalho diferente dentro da mesma estação faz com que um novo processo de servidor para ser iniciados no ambiente de janela estação/trabalho. Para SINGLEUSE "Utilizador executar" servidores, novamente, o servidor herda o ambiente de windows estação/trabalho do processo de cliente. Windows NT 4.0 Service Pack 4.0, COM tenta reutilizar estações de janela. Anteriores a situação, se um servidor é definido como RunAs um utilizador específico e se são iniciadas várias instâncias de processo do servidor, cada processo obterá sua própria estação. Isto origina a estação limitações descrevem acima. No SP4, COM irá tentar criar todos os servidores de RunAs (ou seja, não "Activar como Activator" ou "Utilizador executar") estão definidos para ser executado sob o mesmo utilizador identidade (ou token) na mesma estação de janela. Isto elimina a necessidade para ajustar o tamanho da pilha do ambiente de trabalho nesses casos em que utilizam vários processos de servidor com o mesmo token. Se a configuração, todos os servidores estiverem definidos para RunAs o mesmo utilizador ou múltiplas instâncias do mesmo processo de servidor de RunAs, executar, deve reduzir não heapsize o ambiente de trabalho tal como sugerido no artigo. É recomendável que mantenha-o valor predefinido (3 M) neste caso. Isto deve-se ao facto de, se reduzir a pilha do ambiente de trabalho, em seguida, o sistema pode criar ambientes de mais janela estações/trabalho; no entanto, o número de processos que possa executar uma estação/ambiente de trabalho janela tornam-se progressivamente mais pequeno. Por outro lado, na configuração, se tiver vários servidores com tokens diferentes, em seguida, que irá enfrenta as limitações de estação de janela. Neste caso, deverá seguir as sugestões do artigo para reduzir o tamanho da pilha do ambiente de trabalho. ReferênciasPara obter informações adicionais sobre o problema de pilha do ambiente 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 de ficheiro User32.dll comuns 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 de Artigos |






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


Voltar ao topo