Как я могу заставить тупик системы Mapi DLL передавать расширенные вызовы Mapi моей DLL? - PullRequest
0 голосов
/ 20 апреля 2010

По разным причинам (вопрос о причинах не помогает мне), я бы хотел реализовать свой собственный расширенный mapill для Windows XP. У меня есть скелет dll, только несколько точек входа существуют для тестирования, но системная заглушка mapi (c: \ windows \ system32 \ mapi32.dll, я проверил, что она идентична mapistub.dll) не будет проходить через вызовы мой DLL, в то время как он успешно передает те же вызовы MSMA MS32.dll MS Outlook, (MAPIInitialize, MAPILoginEx два таких вызовов). Есть секретное рукопожатие между заглушкой и расширенным mapi dll, в котором заглушка проверяет, что «да, это расширенный mapi dll»: возможно, это наличие некоторых дополнительных точек входа, которые я еще не реализовал, может быть, это возвращаемое значение из некоторой функции , Я не знаю. Я попытался отследить пример написанного мною приложения, которое вызывает MAPIInitialize с STraceNT и ProcessMonitor, но это не показало ничего очевидного. Трассировка показала, что действительно заглушка загружает мою dll, но затем обнаруживает, что секретный соус явно отсутствует, и возвращает код ошибки вместо вызова функции моей dll. Что еще может потребоваться для вызова MAPIInitialize, чем наличие MAPIInitialize в таблице экспорта моей библиотеки DLL? GetProcAddress говорит, что это там.

То, что я хотел бы знать, - это как минимально расширить мой скелет расширенной mapill, чтобы тупик mapi dll проходил через расширенные вызовы mapi моей dll. Какой секретный соус? Я бы предпочел не тратить мучительную неделю на обратный инжиниринг поведения заглушки в msvc.

1 Ответ

1 голос
/ 20 апреля 2010

Понял, загрузив символы отладки MS и погрузившись в код заглушки в отладчике. Библиотека заглушки не загружает «MAPIInitialize», она загружает «MAPIInitialize @ 4». Я добавил MAPIInitialize @ 4 = _MAPIInitialize @ 4 в раздел EXPORTS файла .def, и теперь все работает нормально.

Кстати, чтобы получить символы для системных библиотек, не загружайте пакет символов отладки MS для XP SP3, символы не были обновлены правильно и не будут работать в отладчике. Вместо этого укажите VS на онлайн-сервер символов MS (http://msdl.microsoft.com/download/symbols)), и пусть VS перетаскивает символы в локальный каталог кэша символов.

...