Я просматривал доступ к реестру vsjitdebugger.exe
, используя Process Monitor , и заметил, что иногда запрашивает реестр следующим образом (некоторая информация опущена):
HKCU\Software\Classes\CLSID\{some-guid} NAME NOT FOUND Desired Access: Read
...
HKCU\Software\Classes\CLSID\{some-guid}\TreatAs NAME NOT FOUND Desired Access: Query Value
...
HKCU\Software\Classes\CLSID\{some-guid}\InprocServer32 NAME NOT FOUND Desired Access: Read
...
HKCR\CLSID\{24E669E1-E90F-4595-A012-B0FD3CCC5C5A}\InprocServer32 SUCCESS Desired Access: Read
Информация о TreatAs на MSDN показывает, что она позволяет указать GUID для другого COM-сервера, который будет вызываться вместо оригинала.
Я не смогчтобы найти гораздо больше информации об этом ключе, и я не смог использовать его на своем собственном COM-объекте: у меня есть две разные реализации одного и того же COM-объекта (в 2 отдельных DLL, с 2 отдельными GUID), и когда мой процесссоздает объект через GUID, я бы хотел, чтобы он создал другой объект (через GUID, указанный в TreatAs).К сожалению, похоже, что Windows немедленно пытается запросить HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32
, вместо того, чтобы сначала искать TreatAs.
Мой вопрос в основном касается правил TreatAs, когда и как его запрашивают?