다음을 통해 공유


IGlobalOptions 인터페이스(objidl.h)

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

상속

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

메서드

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

 
IGlobalOptions::Query

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

IGlobalOptions::Set 메서드(objidl.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
헤더 objidl.h(ObjIdl.h 포함)

추가 정보

IMarshalingStream