음... 일단 IObjectWithSite::SetSite에다 스레드 생성 코드를 두면 안되겠지요. 아마도 생성자 쯤에서 스레드 하나 생성해 두어야 할 것입니다.
그리곤 그 스레드 안에서는 WaitSingleObject인가 하는 함수로 무한 루프 대기를 하는 거죠. 외부 프로세스에서 값을 공유 메모리에 설정한 다음, SetEvent를 하게 되면 BHO 에서 생성한 스레드에서는 그 이후에 공유 메모리 값을 읽어서 내부 static 변수에 설정하면 될 것입니다. (이러한 일련의 과정에 동기화를 현실성이 있는 수준까지 잘 제어를 하셔야 하는 것은 물론이고요.)