IGlobalOptions 인터페이스(objidlbase.h)

COM(구성 요소 개체 모델) 런타임의 전역 속성을 설정하고 쿼리합니다.

상속

IGlobalOptions 인터페이스는IUnknown 인터페이스에서 상속됩니다. IGlobalOptions 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IGlobalOptions 인터페이스에는 이러한 메서드가 있습니다.

 
IGlobalOptions::Query

IGlobalOptions::Query(objidlbase.h) 메서드는 COM 런타임의 지정된 전역 속성을 쿼리합니다.
IGlobalOptions::Set

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 Set 메서드의 COMGLB_RPC_THREADPOOL_SETTING 속성에 대한 가능한 값은 다음과 같습니다.
  • COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL: 전용 프라이빗 스레드 풀을 사용하도록 RPC에 지시합니다.
Query 메서드의 COMGLB_RPC_THREADPOOL_SETTING 속성에 대한 가능한 값은 다음과 같습니다.
  • 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이 초기화된 직후에 설정해야 합니다. COM이 RPC 채널을 초기화하는 작업을 수행한 후 이 속성이 설정되면(예: 개체 참조 마샬링 또는 마샬링 취소) 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 이전 버전과 동일합니다. 플래그가 CoInitializeSecurity에 설정된 경우 EOAC_NO_CUSTOM_MARSHAL 제한이 적용됩니다. 그렇지 않으면 제한이 없습니다. 앱 컨테이너에 없는 프로세스의 기본값입니다.
  • COMGLB_UNMARSHALING_POLICY_STRONG: 경계 해제는 CoAllowUnmarshalerCLSID 함수에 의해 프로세스당 허용되는 강화된 비마샬러 및 언마샬러의 시스템 신뢰 목록만 허용합니다. 이는 앱 컨테이너의 프로세스에 대한 기본값입니다.
  • COMGLB_UNMARSHALING_POLICY_HYBRID: 소스가 앱 컨테이너인 데이터의 경계 해제는 CoAllowUnmarshalerCLSID 함수에서 프로세스당 허용되는 강화된 비마샬러 및 비마샬러 목록만 허용합니다. 앱 컨테이너가 아닌 원본이 있는 데이터에 대한 경계 해제 동작은 이전 버전과 변경되지 않습니다.
참고 이 속성은 Windows 8 이상 버전의 Windows에서만 지원됩니다.
 

로컬 서버 또는 IDropTarget::D rop 메서드를 실행할 때 인바운드 COM 호출을 실행하는 동안 생성될 수 있는 크래시 및 기타 예외를 검색하는 애플리케이션에서 COMGLB_EXCEPTION_HANDLING COMGLB_EXCEPTION_DONOT_HANDLE 설정하여 예외를 catch하는 COM 동작을 사용하지 않도록 설정하는 것이 중요합니다. 이렇게 하지 않으면 프로세스 상태가 손상될 수 있습니다. 예를 들어 이러한 예외가 throw될 때 유지되는 잠금이 중단되고 프로세스가 일관되지 않은 상태가 될 수 있습니다.

이러한 모든 애플리케이션은 시작할 때 이 코드를 실행해야 합니다.

    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();
    }

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 objidlbase.h(ObjIdl.h 포함)

추가 정보

IMarshalingStream