Вы знаете, вы могли бы написать мне и спросить!Было время, когда я прямо писал, что имена и прототипы взяты из общедоступных файлов символов Microsoft, но я давно отказался от этого как словоблудия.Каким бы я был реверс-инженером, если бы всегда объяснял, как я получил свою информацию!Я буду оскорблять тех из моих читателей, которые являются реверс-инженерами, и я рискну скучать тем, кто просто хочет получить информацию (что, давайте посмотрим правде в глаза, как правило, не клепает).
Если у вас нет общедоступных файлов символов, лучше всего использовать библиотеки типов.Но, конечно, не все интерфейсы появляются в библиотеках типов - даже не все, которые реализуют IDispatch.
Учитывая, что у вас есть исполняемый файл и его общедоступный символьный файл, получение IID и перечисление методов - это почти простейший метод обратной разработки.Может быть, это слишком сложно для надежной автоматизации - хотя я бы хотел, чтобы в этом ошиблись.
Вы, вероятно, знаете об интерфейсе, потому что у вас есть таблица виртуальных функций для реализации.Скорее всего, вы нашли это, потому что вы перепроектировали класс, и в этом случае вы находите таблицы виртуальных функций для всех его интерфейсов, работая из конструктора или деструктора.Таблица виртуальных функций - это массив указателей на функции.Публичные файлы символов дают вам оформленные названия этих функций.Компетентный реверс-инженер в большинстве случаев может декорировать эти символы визуально, и Visual C ++ предоставляет инструмент UNDNAME (и ваш отладчик или дизассемблер может в любом случае сделать эту работу за вас).Для нахождения IID обычно требуется проверка метода QueryInterface на соответствие известному смещению таблицы виртуальных функций интерфейса от начала класса.
Для простого интерфейса, скажем, с полдюжины методов, весь процесс написания простого базового списка IID, смещений и прототипов может занять 10 минут в хороший день и не более 30, еслиты ленивый.Конечно, с большим количеством этих недокументированных интерфейсов вы можете проверить, что реализация и IID одинаковы в нескольких версиях, что может быстро превратить хороший день в плохой.
Кстати, если я угадаю что-то или сделаю гипотезу, я постараюсь быть уверенным в том, чтобы сказать это.Например, ближе к концу документации, которую вы цитируете в противном случае недокументированному интерфейсу IListView, я говорю об оконном сообщении: вы можете знать, что имя, которое я даю, составлено мной, потому что я говорю «возможно, назвал что-то вроде».