Нигде не нашел информации. Как обеспечить interlocking при работе с ROT? Допустим, один процесс вызывает IMoniker::BindToObject, моникер лезет в IRunningObjectTable::GetObject и обнаруживает, что объекта там нет. Тогда он создает новый объект и вызывает для него Load. Внутри Load объект должен себя зарегистрить в ROT. Что если другой процесс вызвал BindToObject для такого же моникера после того, как первый процесс обратился к GetObject, но до того, как он зарегистрировал новый объект в ROT? Создание одного экземпляра при этом не обеспечивается.
Даже если предположить, что внутри системных моникеров идет какая-то недокументированная блокировка, через мютекс например, все равно проблема не рещена. Когда обнулился счетчик ссылок объекта, он должен удалить себя из ROT. Что, если другой процесс вызовет GetObject после обнуления счетчика, но до того, как ссылка на объект удалена из ROT? Вот если бы я мог заблокировать таблицу каким-нибудь вызовом вроде IRunningObjectTable::Lock, потом опять проверить счетчик ссылок, если он все еще 0, удалить объект из ROT и разблокировать ее. Но ведь не могу?
В общем, ответа на этот вопрос в MSDN я так и не нашел. А вроде, он должен постоянно возникать? Может, кто чего знает?