Как я могу получить тупик системы mapi для передачи расширенных вызовов mapi моей dll?
По разным причинам (вопрос о причинах не помогает мне), я хотел бы реализовать свой собственный расширенный mapill для Windows XP. У меня есть скелет dll, только несколько точек входа существуют для тестирования, но системная заглушка mapi (c:\windows\system32\mapi32.dll, я проверил, что она идентична mapistub.dll) не будет проходить через вызовы мой DLL, в то время как он успешно передает те же вызовы MSmapi32.dll MS Outlook, (MAPIInitialize, MAPILoginEx два таких вызовов). Есть секретное рукопожатие между заглушкой и расширенным mapi dll, в котором заглушка проверяет, что "да, это расширенный mapi dll": возможно, это наличие некоторых дополнительных точек входа, которые я еще не реализовал, может быть, это возвращаемое значение из некоторой функции, Я не знаю. Я попытался отследить пример написанного мною приложения, которое вызывает MAPIInitialize с STraceNT и ProcessMonitor, но это не показало ничего очевидного. Трассировка показала, что действительно заглушка загружает мою dll, но затем обнаруживает, что секретный соус явно отсутствует, и возвращает код ошибки вместо вызова функции моей dll. Что еще может потребоваться для вызова MAPIInitialize, чем наличие MAPIInitialize в таблице экспорта моей библиотеки DLL? GetProcAddress говорит, что это там.
Что я хотел бы знать, так это как минимально расширить мой скелет расширенного mapi dll, чтобы заглушка mapi dll проходила через расширенные вызовы mapi к моей dll. Какой секретный соус? Я бы предпочел не тратить мучительную неделю на обратный инжиниринг поведения заглушки в msvc.
1 ответ
Разобрался, загрузив символы отладки MS и погрузившись в код заглушки в отладчике. Библиотека заглушки не загружает "MAPIInitialize", она загружает "MAPIInitialize@4". Я добавил MAPIInitialize@4=_MAPIInitialize@4 в мой раздел EXPORTS файла.def, и теперь все работает нормально.
Кстати, чтобы получить символы для системных библиотек, не загружайте пакет символов отладки MS для XP SP3, символы не были обновлены правильно и не будут работать в отладчике. Вместо этого укажите VS на онлайн-сервер символов MS ( http://msdl.microsoft.com/download/symbols) и позвольте VS перебрасывать символы в локальный каталог кэша символов.