Interface IGlobalOptions (objidlbase.h)

Define e consulta propriedades globais do runtime do COM (Component Object Model).

Herança

A interface IGlobalOptions herda da interface IUnknown . O IGlobalOptions também tem esses tipos de membros:

Métodos

A interface IGlobalOptions tem esses métodos.

 
IGlobalOptions::Query

O método IGlobalOptions::Query (objidlbase.h) consulta a propriedade global especificada do runtime COM.
IGlobalOptions::Set

O método IGlobalOptions::Set (objidlbase.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 O AppID para o 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 lide com 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 de 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 ser propagadas 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 podem 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, o cuidado deve ser exercido 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 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 de rundown de stub rápido, o que significa que os stubs são executados no encerramento do processo do cliente, em vez de aguardar que os tempos limite normais de limpeza expirem.
  • COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES: remover 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 nãomarsalização é o mesmo que versões anteriores a Windows 8. EOAC_NO_CUSTOM_MARSHAL restrições se aplicam 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 unmarshaling 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: a desmarsalação de dados cuja origem é o contêiner do aplicativo permite apenas uma lista confiável do sistema de unmarshalers protegidos e unmarshalers permitidos por processo pela função CoAllowUnmarshalerCLSID . O comportamento de nãomarsalizaçã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.

    IGlobalOptions *pGlobalOptions;
    hr =  CoCreateInstance(CLSID_GlobalOptions, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGlobalOptions));
    if (SUCCEEDED(hr))
    {
        hr = pGlobalOptions->Set(COMGLB_EXCEPTION_HANDLING, COMGLB_EXCEPTION_DONOT_HANDLE);
        pGlobalOptions->Release();
    }

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho objidlbase.h (inclua ObjIdl.h)

Confira também

IMarshalingStream