피드로 돌아가기
Deep Inside the COM: Hunting the COM Global Interface Table (GIT)
Dev.toDev.to
Infrastructure

COM Apartment 제약을 극복하는 GIT 기반 인터페이스 공유 설계 분석

Deep Inside the COM: Hunting the COM Global Interface Table (GIT)

Pastukhov Aleksey2026년 6월 4일5advanced

Context

COM 인터페이스 포인터의 Apartment 종속성으로 인한 스레드 간 공유 시 Crash 및 Deadlock 발생 위험 존재. 서로 다른 Apartment 간 안전한 객체 전달을 위한 전역적 관리 체계 필요성 대두.

Technical Solution

  • Process-wide Singleton 구조의 Global Interface Table(GIT)을 통해 인터페이스 포인터를 정수형 Cookie로 추상화하여 관리
  • combase.dll 로딩 단계의 CRT dynamic initializers에서 조기 초기화하여 런타임 오버헤드 최소화
  • RegisterInterfaceInGlobal를 통한 인터페이스 등록 및 Cookie 발급으로 포인터 직접 전달 방식의 한계 해결
  • 내부적으로 RegisterInterfaceInGlobalHlp 헬퍼 함수를 공유하여 classic COM GIT와 WinRT Agile Reference 메커니즘을 통합 구현
  • Marshaling, Proxy 생성, Lifetime Management를 COM 런타임 내부에 캡슐화하여 개발자 구현 복잡도 제거
  • Page-based Allocator 구조를 활용한 Cookie 기반의 빠른 엔트리 조회 및 유효성 검증 로직 적용

1. 멀티스레드 환경에서 객체 공유 시 직접 참조 대신 식별자 기반의 Registry 패턴 검토

2. 라이브러리 초기화 시점에 Singleton 객체를 사전 생성하여 런타임 CoCreateInstance 비용 절감 가능성 확인

3. 서로 다른 두 기술 스택(COM/WinRT)의 유사 기능을 내부 공통 헬퍼 함수로 통합하여 코드 중복 제거

원문 읽기