From 69156f5ae26546f01bafe3795e3f194e34e9de80 Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Fri, 18 Sep 2009 15:15:40 +0100 Subject: [PATCH] mapi32: Load and store MAPI function pointers after loading MAPI providers. --- dlls/mapi32/util.c | 29 +++++++++++++++++++++++++++++ dlls/mapi32/util.h | 22 ++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/dlls/mapi32/util.c b/dlls/mapi32/util.c index 6044749991f..6a6a5cd07aa 100644 --- a/dlls/mapi32/util.c +++ b/dlls/mapi32/util.c @@ -48,6 +48,8 @@ static const BYTE digitsToHex[] = { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,10,11,12,13, 14,15 }; +MAPI_FUNCTIONS mapiFunctions; + /************************************************************************** * ScInitMapiUtil (MAPI32.33) * @@ -1029,6 +1031,33 @@ void load_mapi_providers(void) load_mapi_provider(hkeyMail, regkey_dllpath, &mapi_provider); load_mapi_provider(hkeyMail, regkey_dllpath_ex, &mapi_ex_provider); + /* Now try to load our function pointers */ + ZeroMemory(&mapiFunctions, sizeof(mapiFunctions)); + + /* Simple MAPI functions */ + if (mapi_provider) + { + mapiFunctions.MAPIAddress = (void*) GetProcAddress(mapi_provider, "MAPIAddress"); + mapiFunctions.MAPIDeleteMail = (void*) GetProcAddress(mapi_provider, "MAPIDeleteMail"); + mapiFunctions.MAPIDetails = (void*) GetProcAddress(mapi_provider, "MAPIDetails"); + mapiFunctions.MAPIFindNext = (void*) GetProcAddress(mapi_provider, "MAPIFindNext"); + mapiFunctions.MAPILogoff = (void*) GetProcAddress(mapi_provider, "MAPILogoff"); + mapiFunctions.MAPILogon = (void*) GetProcAddress(mapi_provider, "MAPILogon"); + mapiFunctions.MAPIReadMail = (void*) GetProcAddress(mapi_provider, "MAPIReadMail"); + mapiFunctions.MAPIResolveName = (void*) GetProcAddress(mapi_provider, "MAPIResolveName"); + mapiFunctions.MAPISaveMail = (void*) GetProcAddress(mapi_provider, "MAPISaveMail"); + mapiFunctions.MAPISendDocuments = (void*) GetProcAddress(mapi_provider, "MAPISendDocuments"); + mapiFunctions.MAPISendMail = (void*) GetProcAddress(mapi_provider, "MAPISendMail"); + } + + /* Extended MAPI functions */ + if (mapi_ex_provider) + { + mapiFunctions.MAPIInitialize = (void*) GetProcAddress(mapi_ex_provider, "MAPIInitialize"); + mapiFunctions.MAPILogonEx = (void*) GetProcAddress(mapi_ex_provider, "MAPILogonEx"); + mapiFunctions.MAPIUninitialize = (void*) GetProcAddress(mapi_ex_provider, "MAPIUninitialize"); + } + cleanUp: RegCloseKey(hkeyMail); HeapFree(GetProcessHeap(), 0, appKey); diff --git a/dlls/mapi32/util.h b/dlls/mapi32/util.h index 450d671c1a5..69b160372f1 100644 --- a/dlls/mapi32/util.h +++ b/dlls/mapi32/util.h @@ -22,7 +22,29 @@ #define _MAPI_UTIL_H +#include +#include + extern void load_mapi_providers(void); extern void unload_mapi_providers(void); +typedef struct MAPI_FUNCTIONS { + LPMAPIADDRESS MAPIAddress; + LPMAPIDELETEMAIL MAPIDeleteMail; + LPMAPIDETAILS MAPIDetails; + LPMAPIFINDNEXT MAPIFindNext; + LPMAPIINITIALIZE MAPIInitialize; + LPMAPILOGOFF MAPILogoff; + LPMAPILOGON MAPILogon; + LPMAPILOGONEX MAPILogonEx; + LPMAPIREADMAIL MAPIReadMail; + LPMAPIRESOLVENAME MAPIResolveName; + LPMAPISAVEMAIL MAPISaveMail; + LPMAPISENDMAIL MAPISendMail; + LPMAPISENDDOCUMENTS MAPISendDocuments; + LPMAPIUNINITIALIZE MAPIUninitialize; +} MAPI_FUNCTIONS; + +extern MAPI_FUNCTIONS mapiFunctions; + #endif