O método IGlobalOptions::Set (objidl.h) define a propriedade global especificada do runtime COM.
Comentários
As propriedades globais a seguir do runtime COM podem ser definidas e consultadas com essa interface.
Propriedade
Valores
COMGLB_APPID
A AppID do processo.
Essa é a única propriedade com suporte no Windows XP.
COMGLB_EXCEPTION_HANDLING
Os valores possíveis para a propriedade COMGLB_EXCEPTION_HANDLING são:
COMGLB_EXCEPTION_HANDLE: esse é o comportamento padrão. Essa configuração faz com que o runtime COM manipule exceções fatais.
COMGLB_EXCEPTION_DONOT_HANDLE: isso faz com que o runtime COM não manipule exceções fatais.
COMGLB_EXCEPTION_DONOT_HANDLE_FATAL: Alias para COMGLB_EXCEPTION_DONOT_HANDLE. Com suporte no Windows 7 e posterior.
COMGLB_EXCEPTION_DONOT_HANDLE_ANY: quando definido e ocorre uma exceção fatal em um método COM, isso faz com que o runtime COM não manipule a exceção.
Quando definido e uma exceção não fatal ocorre em um método COM, isso faz com que o runtime COM crie um despejo de Relatório de Erros do Windows (WER) e encerre o processo.
Com suporte no Windows 7 e posterior.
Por padrão, o runtime COM lida com exceções fatais geradas durante invocações de método retornando o código de erro RPC_E_SERVERFAULT para o cliente. Um aplicativo desabilita esse comportamento para permitir que exceções se propaguem ao WER, o que cria despejos de processo do aplicativo e encerra o aplicativo. Isso evita possíveis dados corrompidos e permite que um fornecedor de aplicativos depure os despejos.
Nota Mesmo que o tratamento de exceção de runtime COM esteja desabilitado, as exceções poderão não se propagar para WER se houver outro manipulador de exceção no nível do aplicativo no processo que manipula a exceção.
Para novos aplicativos, é recomendável que a propriedade COMGLB_EXCEPTION_HANDLING seja definida como COMGLB_EXCEPTION_DONOT_HANDLE_ANY.
COMGLB_RPC_THREADPOOL_SETTING
Os valores possíveis para a propriedade COMGLB_RPC_THREADPOOL_SETTING no método Set são:
COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: instrui o RPC a usar um pool de threads privado dedicado.
Os valores possíveis para a propriedade COMGLB_RPC_THREADPOOL_SETTING no método Query são:
COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: o RPC usa um pool de threads privado dedicado.
COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL: o RPC usa o pool de threads padrão do sistema.
O RPC usa o pool de threads do sistema por padrão no Windows 7. Como o pool de threads do sistema é compartilhado por vários componentes no processo, as operações COM e RPC poderão se comportar incorretamente se o estado do pool de threads estiver corrompido por um componente.
A propriedade COMGLB_RPC_THREADPOOL_SETTING pode ser usada para alterar o comportamento do pool de threads RPC. Alterar o comportamento padrão incorrerá em uma penalidade de desempenho, pois isso faz com que o RPC use um thread extra. Portanto, deve-se ter cuidado ao alterar essa configuração. É recomendável que essa configuração seja alterada apenas por motivos de compatibilidade do aplicativo.
Nota Essa propriedade deve ser definida imediatamente após o COM ser inicializado no processo. Se essa propriedade for definida depois de executar qualquer operação que faça com que COM inicialize o canal RPC (por exemplo, marshaling ou referências de objeto unmarshalling), o método Set falhará.
Nota Essa propriedade só tem suporte no Windows 7 e em versões posteriores do Windows.
COMGLB_RO_SETTINGS
Os valores possíveis para a propriedade COMGLB_RO_SETTINGS são:
COMGLB_FAST_RUNDOWN: indica que os stubs no processo atual estão sujeitos a um comportamento rápido de rundown de stub, o que significa que os stubs são executados no encerramento do processo do cliente, em vez de esperar que os tempos limite normais de limpeza expirem.
COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES: remova mensagens de toque da fila de mensagens no loop modal STA.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES: as mensagens de entrada são removidas no loop modal STA quando a fila de mensagens do thread é anexada.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES: as mensagens de entrada não são removidas no loop modal STA quando a fila de mensagens do thread é anexada.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES: as mensagens de entrada de ponteiro não são removidas no loop modal STA quando a fila de mensagens do thread está anexada, mas são temporariamente mascaradas para evitar deadlocks decorrentes da fila anexada.
COMGLB_RESERVED1: reservado para uso futuro.
COMGLB_RESERVED2: reservado para uso futuro.
COMGLB_RESERVED3: reservado para uso futuro.
Nota Essa propriedade só tem suporte em Windows 8 e versões posteriores do Windows.
COMGLB_UNMARSHALING_POLICY
Os valores possíveis para a propriedade COMGLB_UNMARSHALING_POLICY são:
COMGLB_UNMARSHALING_POLICY_NORMAL: o comportamento de desmarcação é o mesmo que as versões anteriores a Windows 8.
EOAC_NO_CUSTOM_MARSHAL restrições se aplicarão se esse sinalizador estiver definido em CoInitializeSecurity. Caso contrário, não há restrições. Esse é o padrão para processos que não estão no contêiner do aplicativo.
COMGLB_UNMARSHALING_POLICY_STRONG: a desmarsalação permite apenas uma lista confiável do sistema de unmarshalers protegidos e unmarshalers permitidos por processo pela função CoAllowUnmarshalerCLSID . Esse é o padrão para processos no contêiner do aplicativo.
COMGLB_UNMARSHALING_POLICY_HYBRID: cancelar o registro de dados cuja origem é o contêiner de aplicativos permite apenas uma lista confiável do sistema de unmarshalers protegidos e unmarshalers permitidos por processo pela função CoAllowUnmarshalerCLSID . O comportamento de desmarcação de dados com uma origem que não é contêiner de aplicativo é inalterado em relação às versões anteriores.
Nota Essa propriedade só tem suporte em Windows 8 e versões posteriores do Windows.
É importante para aplicativos que detectam falhas e outras exceções que podem ser geradas durante a execução de chamadas COM de entrada, por exemplo, uma chamada em um servidor local ou ao executar o método IDropTarget::D rop , para definir COMGLB_EXCEPTION_HANDLING como COMGLB_EXCEPTION_DONOT_HANDLE para desabilitar o comportamento COM de capturar exceções. A falha em fazer isso pode levar a um estado de processo corrompido, por exemplo, bloqueios mantidos quando essas exceções são lançadas são abandonados e o processo pode entrar em um estado inconsistente.
Todos esses aplicativos devem executar esse código na inicialização.