【发布时间】:2012-05-09 21:44:14
【问题描述】:
由于各种原因(质疑原因对我没有帮助),我想为windows xp实现我自己的扩展mapi dll。我现在有一个框架 dll,只有几个入口点用于测试,但是系统 mapi 存根(c:\windows\system32\mapi32.dll,我已经检查它与 mapistub.dll 相同)不会通过调用我的 dll,虽然它很高兴地将相同的调用传递给 MS Outlook 的 msmapi32.dll,(MAPIInitialize、MAPILoginEx 是两个这样的调用)。在存根和扩展的 mapi dll 之间有一些秘密握手,其中存根检查“是的,它是一个扩展的 mapi dll”:也许是我还没有实现的一些额外入口点的存在,也许是某个函数的返回值, 我不知道。我尝试跟踪我编写的一个示例应用程序,该应用程序使用 STraceNT 和 ProcessMonitor 调用 MAPIInitialize,但这并没有显示任何明显的内容。跟踪表明,存根确实加载了我的 dll,但随后发现秘密酱明显丢失,并返回错误代码而不是调用我的 dll 的函数。除了在我的 dll 的导出表中存在 MAPIInitialize 之外,调用 MAPIInitialize 还需要什么? GetProcAddress 说它在那里。
我想知道的是如何最小程度地扩展我的骨架扩展 mapi dll,以便存根 mapi dll 将通过扩展 mapi 调用传递给我的 dll。秘方是什么?我宁愿不要在 msvc 对存根行为进行逆向工程上度过痛苦的一周。
【问题讨论】: