El método IGlobalOptions::Set (objidlbase.h) establece la propiedad global especificada del runtime COM.
Comentarios
Las siguientes propiedades globales del entorno de ejecución com se pueden establecer y consultar con esta interfaz.
Propiedad
Valores
COMGLB_APPID
AppID para el proceso.
Esta es la única propiedad admitida en Windows XP.
COMGLB_EXCEPTION_HANDLING
Los valores posibles para la propiedad COMGLB_EXCEPTION_HANDLING son:
COMGLB_EXCEPTION_HANDLE: este es el comportamiento predeterminado. Esta configuración hace que el tiempo de ejecución de COM controle excepciones irrecuperables.
COMGLB_EXCEPTION_DONOT_HANDLE: esto hace que el tiempo de ejecución com no controle excepciones irrecuperables.
COMGLB_EXCEPTION_DONOT_HANDLE_FATAL: alias para COMGLB_EXCEPTION_DONOT_HANDLE. Compatible con Windows 7 y versiones posteriores.
COMGLB_EXCEPTION_DONOT_HANDLE_ANY: cuando se establece y se produce una excepción grave en un método COM, esto hace que el tiempo de ejecución com no controle la excepción.
Cuando se establece y se produce una excepción no grave en un método COM, esto hace que el tiempo de ejecución de COM cree un volcado de Informe de errores de Windows (WER) y finalice el proceso.
Compatible con Windows 7 y versiones posteriores.
De forma predeterminada, el tiempo de ejecución com controla las excepciones irrecuperables generadas durante las invocaciones de método devolviendo el código de error RPC_E_SERVERFAULT al cliente. Una aplicación deshabilita este comportamiento para permitir que las excepciones se propague a WER, lo que crea volcados de proceso de aplicación y finaliza la aplicación. Esto evita posibles daños en los datos y permite a un proveedor de la aplicación depurar los volcados de memoria.
Nota Incluso si el control de excepciones en tiempo de ejecución COM está deshabilitado, es posible que las excepciones no se propague a WER si hay otro controlador de excepciones de nivel de aplicación en el proceso que controla la excepción.
En el caso de las nuevas aplicaciones, se recomienda establecer la propiedad COMGLB_EXCEPTION_HANDLING en COMGLB_EXCEPTION_DONOT_HANDLE_ANY.
COMGLB_RPC_THREADPOOL_SETTING
Los valores posibles para la propiedad COMGLB_RPC_THREADPOOL_SETTING del método Set son:
COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: indica a RPC que use un grupo de subprocesos privados dedicado.
Los valores posibles para la propiedad COMGLB_RPC_THREADPOOL_SETTING del método Query son:
COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: RPC usa un grupo de subprocesos privados dedicado.
COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL: RPC usa el grupo de subprocesos predeterminado del sistema.
RPC usa el grupo de subprocesos del sistema de forma predeterminada en Windows 7. Dado que el grupo de subprocesos del sistema lo comparten varios componentes en el proceso, las operaciones COM y RPC pueden comportarse incorrectamente si el estado del grupo de subprocesos está dañado por un componente.
La propiedad COMGLB_RPC_THREADPOOL_SETTING se puede usar para cambiar el comportamiento del grupo de subprocesos RPC. Cambiar el comportamiento predeterminado incurrirá en una penalización de rendimiento, ya que esto hace que RPC use un subproceso adicional. Por lo tanto, se debe tener cuidado al cambiar esta configuración. Se recomienda cambiar esta configuración solo por motivos de compatibilidad de aplicaciones.
Nota Esta propiedad debe establecerse inmediatamente después de inicializar COM en el proceso. Si esta propiedad se establece después de realizar las operaciones que hacen que COM inicialice el canal RPC (por ejemplo, serialización o referencias de objetos no coincidentes), se producirá un error en el método Set .
Nota Esta propiedad solo se admite en Windows 7 y versiones posteriores de Windows.
COMGLB_RO_SETTINGS
Los valores posibles para la propiedad COMGLB_RO_SETTINGS son:
COMGLB_FAST_RUNDOWN: indica que los códigos auxiliares del proceso actual están sujetos a un comportamiento rápido de descomponimiento del código auxiliar, lo que significa que los códigos auxiliares se ejecutan al finalizar el proceso de cliente, en lugar de esperar a que expiren los tiempos de espera normales de limpieza.
COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES: quite los mensajes táctiles de la cola de mensajes en el bucle modal sta.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES: los mensajes de entrada se quitan en el bucle modal sta cuando se adjunta la cola de mensajes del subproceso.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES: los mensajes de entrada no se quitan en el bucle modal STA cuando se adjunta la cola de mensajes del subproceso.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES: los mensajes de entrada de puntero no se quitan en el bucle modal STA cuando se adjunta la cola de mensajes del subproceso, pero se enmascaran temporalmente para evitar interbloqueos derivados de la cola adjunta.
COMGLB_RESERVED1: reservado para uso futuro.
COMGLB_RESERVED2: reservado para uso futuro.
COMGLB_RESERVED3: reservado para uso futuro.
Nota Esta propiedad solo se admite en Windows 8 y versiones posteriores de Windows.
COMGLB_UNMARSHALING_POLICY
Los valores posibles para la propiedad COMGLB_UNMARSHALING_POLICY son:
COMGLB_UNMARSHALING_POLICY_NORMAL: el comportamiento de desacoplar es el mismo que las versiones anteriores a Windows 8.
EOAC_NO_CUSTOM_MARSHAL restricciones se aplican si esta marca está establecida en CoInitializeSecurity. De lo contrario, no hay restricciones. Este es el valor predeterminado para los procesos que no están en el contenedor de aplicaciones.
COMGLB_UNMARSHALING_POLICY_STRONG: El desmarshaling solo permite una lista de confianza del sistema de unmarshalers protegidos y unmarshalers permitidos por proceso por la función CoAllowUnmarshalerCLSID . Este es el valor predeterminado para los procesos del contenedor de aplicaciones.
COMGLB_UNMARSHALING_POLICY_HYBRID: Desmarshaling data cuyo origen es el contenedor de aplicaciones solo permite una lista de confianza del sistema de separadores protegidos y unmarshalers permitidos por proceso por la función CoAllowUnmarshalerCLSID . El comportamiento de desacoplado de los datos con un origen que no es contenedor de aplicaciones no cambia a partir de las versiones anteriores.
Nota Esta propiedad solo se admite en Windows 8 y versiones posteriores de Windows.
Es importante que las aplicaciones detecten bloqueos y otras excepciones que se puedan generar al ejecutar llamadas COM entrantes, por ejemplo, una llamada en un servidor local o al ejecutar el método IDropTarget::D rop , para establecer COMGLB_EXCEPTION_HANDLING en COMGLB_EXCEPTION_DONOT_HANDLE para deshabilitar el comportamiento COM de detectar excepciones. Si no se hace esto, se puede producir un estado de proceso dañado; por ejemplo, los bloqueos que se mantienen cuando se producen estas excepciones se abandonan y el proceso podría entrar en un estado incoherente.
Todas estas aplicaciones deben ejecutar este código al iniciarse.