Метод IGlobalOptions::Set (objidlbase.h) задает указанное глобальное свойство среды выполнения COM.
Комментарии
С помощью этого интерфейса можно задать и запросить следующие глобальные свойства среды выполнения COM.
Свойство
Значения
COMGLB_APPID
AppID для процесса.
Это единственное поддерживаемое свойство в Windows XP.
COMGLB_EXCEPTION_HANDLING
Возможные значения свойства COMGLB_EXCEPTION_HANDLING:
COMGLB_EXCEPTION_HANDLE. Это поведение по умолчанию. Этот параметр приводит к тому, что среда выполнения COM обрабатывает неустранимые исключения.
COMGLB_EXCEPTION_DONOT_HANDLE. Это приводит к тому, что среда выполнения COM не обрабатывает неустранимые исключения.
COMGLB_EXCEPTION_DONOT_HANDLE_FATAL: псевдоним для COMGLB_EXCEPTION_DONOT_HANDLE. Поддерживается в Windows 7 и более поздних версиях.
COMGLB_EXCEPTION_DONOT_HANDLE_ANY. Если задано и в методе COM возникает неустранимое исключение, среда выполнения COM не обрабатывает исключение.
Если задано и в методе COM возникает неустранимое исключение, среда выполнения COM создает дамп отчеты об ошибках Windows (WER) и завершает процесс.
Поддерживается в Windows 7 и более поздних версиях.
По умолчанию среда выполнения COM обрабатывает неустранимые исключения, возникающие при вызове метода, возвращая клиенту код ошибки RPC_E_SERVERFAULT. Приложение отключает это поведение, чтобы разрешить распространение исключений в WER, что создает дампы процессов приложения и завершает работу приложения. Это предотвращает возможное повреждение данных и позволяет поставщику приложения выполнять отладку дампов.
Примечание Даже если обработка исключений среды выполнения COM отключена, исключения могут не распространяться на WER, если в процессе, обрабатывающем исключение, есть другой обработчик исключений уровня приложения.
Для новых приложений рекомендуется присвоить свойству COMGLB_EXCEPTION_HANDLING значение COMGLB_EXCEPTION_DONOT_HANDLE_ANY.
COMGLB_RPC_THREADPOOL_SETTING
Возможные значения свойства COMGLB_RPC_THREADPOOL_SETTING в методе Set :
COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: указывает RPC использовать выделенный пул частных потоков.
Возможные значения свойства COMGLB_RPC_THREADPOOL_SETTING в методе Query :
COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: RPC использует выделенный пул частных потоков.
COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL: RPC использует системный пул потоков по умолчанию.
RPC использует системный пул потоков по умолчанию в Windows 7. Так как пул системных потоков совместно используется несколькими компонентами процесса, операции COM и RPC могут работать неправильно, если состояние пула потоков повреждено компонентом.
Свойство COMGLB_RPC_THREADPOOL_SETTING можно использовать для изменения поведения пула потоков RPC. Изменение поведения по умолчанию приведет к снижению производительности, так как это приведет к использованию RPC дополнительного потока. Поэтому при изменении этого параметра следует проявлять осторожность. Рекомендуется изменять этот параметр только для обеспечения совместимости приложений.
Примечание Это свойство должно быть задано сразу после инициализации COM в процессе. Если это свойство задано после выполнения каких-либо операций, вызывающих инициализацию канала RPC COM (например, маршалинг или отмена ссылок на объекты), метод Set завершится ошибкой.
Примечание Это свойство поддерживается только в Windows 7 и более поздних версиях Windows.
COMGLB_RO_SETTINGS
Возможные значения свойства COMGLB_RO_SETTINGS:
COMGLB_FAST_RUNDOWN. Указывает, что заглушки в текущем процессе подвергаются быстрому выполнению заглушки. Это означает, что заглушки запускаются после завершения клиентского процесса, а не дожидаются истечения обычного времени ожидания очистки.
COMGLB_STA_MODALLOOP_REMOVE_TOUCH_MESSAGES. Удалите сообщения касания из очереди сообщений в модальном цикле STA.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_REMOVE_INPUT_MESSAGES. Входные сообщения удаляются в модальном цикле STA при присоединении очереди сообщений потока.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_DONOT_REMOVE_INPUT_MESSAGES: входные сообщения не удаляются в модальном цикле STA при присоединении очереди сообщений потока.
COMGLB_STA_MODALLOOP_SHARED_QUEUE_REORDER_POINTER_MESSAGES. Входные сообщения указателя не удаляются в модальном цикле STA при присоединении очереди сообщений потока, но временно маскируются, чтобы избежать взаимоблокировок, возникающих из подключенной очереди.
COMGLB_RESERVED1: зарезервировано для использования в будущем.
COMGLB_RESERVED2: зарезервировано для использования в будущем.
COMGLB_RESERVED3: зарезервировано для использования в будущем.
Примечание Это свойство поддерживается только в Windows 8 и более поздних версиях Windows.
COMGLB_UNMARSHALING_POLICY
Возможные значения свойства COMGLB_UNMARSHALING_POLICY:
COMGLB_UNMARSHALING_POLICY_NORMAL. Поведение отмены маршалинга совпадает с поведением версий, предшествующих Windows 8.
EOAC_NO_CUSTOM_MARSHAL ограничения применяются, если этот флаг установлен в CoInitializeSecurity. В противном случае ограничений нет. Это значение по умолчанию для процессов, которых нет в контейнере приложений.
COMGLB_UNMARSHALING_POLICY_STRONG. Размыкание допускает только список доверенных системой защищенных немаршалеров и немаршалеров, разрешенных для каждого процесса функцией CoAllowUnmarshalerCLSID . Это значение по умолчанию для процессов в контейнере приложения.
COMGLB_UNMARSHALING_POLICY_HYBRID. Размыкание данных, источником которых является контейнер приложений, позволяет получить только список защищенных немаршалеров и немаршалеров, разрешенных для каждого процесса функцией CoAllowUnmarshalerCLSID . Поведение отмены маркировки для данных с источником, который не является контейнером приложений, не отличается от предыдущих версий.
Примечание Это свойство поддерживается только в Windows 8 и более поздних версиях Windows.
Для приложений, которые обнаруживают сбои и другие исключения, которые могут создаваться при выполнении входящих COM-вызовов, например при вызове на локальном сервере или при выполнении метода IDropTarget::D rop , важно задать COMGLB_EXCEPTION_HANDLING COMGLB_EXCEPTION_DONOT_HANDLE отключить поведение COM перехвата исключений. Если это не сделать, это может привести к повреждению состояния процесса, например блокировки, удерживаемые при возникновении этих исключений, будут отменены, а процесс может перейти в несогласованное состояние.
Все такие приложения должны выполнять этот код при запуске.