Commit 2d1a7173 authored by Owen Rudge's avatar Owen Rudge Committed by Alexandre Julliard

mapi32: Pass several extended MAPI functions through to provider.

parent d6bc1f5e
......@@ -32,6 +32,7 @@
#include "objbase.h"
#include "shlwapi.h"
#include "mapiutil.h"
#include "util.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mapi);
......@@ -63,6 +64,9 @@ LPMALLOC WINAPI MAPIGetDefaultMalloc(void)
{
TRACE("()\n");
if (mapiFunctions.MAPIGetDefaultMalloc)
return mapiFunctions.MAPIGetDefaultMalloc();
IMalloc_AddRef((LPMALLOC)&MAPI_IMalloc);
return (LPMALLOC)&MAPI_IMalloc;
}
......
......@@ -89,7 +89,15 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
*/
HRESULT WINAPI DllCanUnloadNow(void)
{
return MAPI_ObjectCount == 0 ? S_OK : S_FALSE;
HRESULT ret = S_OK;
if (mapiFunctions.DllCanUnloadNow)
{
ret = mapiFunctions.DllCanUnloadNow();
TRACE("(): provider returns %d\n", ret);
}
return MAPI_ObjectCount == 0 ? ret : S_FALSE;
}
/***********************************************************************
......@@ -167,6 +175,9 @@ HRESULT WINAPI MAPILogonEx(ULONG_PTR uiparam, LPWSTR profile,
HRESULT WINAPI MAPIOpenLocalFormContainer(LPVOID *ppfcnt)
{
if (mapiFunctions.MAPIOpenLocalFormContainer)
return mapiFunctions.MAPIOpenLocalFormContainer(ppfcnt);
FIXME("(%p) Stub\n", ppfcnt);
return E_FAIL;
}
......@@ -189,6 +200,9 @@ VOID WINAPI MAPIUninitialize(void)
HRESULT WINAPI MAPIAdminProfiles(ULONG ulFlags, LPPROFADMIN *lppProfAdmin)
{
if (mapiFunctions.MAPIAdminProfiles)
return mapiFunctions.MAPIAdminProfiles(ulFlags, lppProfAdmin);
FIXME("(%u, %p): stub\n", ulFlags, lppProfAdmin);
*lppProfAdmin = NULL;
return E_FAIL;
......
......@@ -68,6 +68,9 @@ MAPI_FUNCTIONS mapiFunctions;
*/
SCODE WINAPI ScInitMapiUtil(ULONG ulReserved)
{
if (mapiFunctions.ScInitMapiUtil)
return mapiFunctions.ScInitMapiUtil(ulReserved);
FIXME("(0x%08x)stub!\n", ulReserved);
if (ulReserved)
return MAPI_E_INVALID_PARAMETER;
......@@ -91,7 +94,10 @@ SCODE WINAPI ScInitMapiUtil(ULONG ulReserved)
*/
VOID WINAPI DeinitMapiUtil(void)
{
FIXME("()stub!\n");
if (mapiFunctions.DeinitMapiUtil)
mapiFunctions.DeinitMapiUtil();
else
FIXME("()stub!\n");
}
typedef LPVOID *LPMAPIALLOCBUFFER;
......@@ -124,6 +130,9 @@ SCODE WINAPI MAPIAllocateBuffer(ULONG cbSize, LPVOID *lppBuffer)
TRACE("(%d,%p)\n", cbSize, lppBuffer);
if (mapiFunctions.MAPIAllocateBuffer)
return mapiFunctions.MAPIAllocateBuffer(cbSize, lppBuffer);
if (!lppBuffer)
return E_INVALIDARG;
......@@ -164,6 +173,9 @@ SCODE WINAPI MAPIAllocateMore(ULONG cbSize, LPVOID lpOrig, LPVOID *lppBuffer)
TRACE("(%d,%p,%p)\n", cbSize, lpOrig, lppBuffer);
if (mapiFunctions.MAPIAllocateMore)
return mapiFunctions.MAPIAllocateMore(cbSize, lpOrig, lppBuffer);
if (!lppBuffer || !lpBuff || !--lpBuff)
return E_INVALIDARG;
......@@ -200,6 +212,9 @@ ULONG WINAPI MAPIFreeBuffer(LPVOID lpBuffer)
TRACE("(%p)\n", lpBuffer);
if (mapiFunctions.MAPIFreeBuffer)
return mapiFunctions.MAPIFreeBuffer(lpBuffer);
if (lpBuff && --lpBuff)
{
while (lpBuff)
......@@ -239,6 +254,9 @@ HRESULT WINAPI WrapProgress(PVOID unk1, PVOID unk2, PVOID unk3, PVOID unk4, PVOI
*/
HRESULT WINAPI HrThisThreadAdviseSink(LPMAPIADVISESINK lpSink, LPMAPIADVISESINK* lppNewSink)
{
if (mapiFunctions.HrThisThreadAdviseSink)
return mapiFunctions.HrThisThreadAdviseSink(lpSink, lppNewSink);
FIXME("(%p,%p)semi-stub\n", lpSink, lppNewSink);
if (!lpSink || !lppNewSink)
......@@ -695,6 +713,9 @@ HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER lpAlloc, LPFREEBUFFER lpFree,
TRACE("(%p,%p,0x%08x,%s,%s,%p)\n", lpAlloc, lpFree, ulFlags,
debugstr_a((LPSTR)lpszPath), debugstr_a((LPSTR)lpszPrefix), lppStream);
if (mapiFunctions.OpenStreamOnFile)
return mapiFunctions.OpenStreamOnFile(lpAlloc, lpFree, ulFlags, lpszPath, lpszPrefix, lppStream);
if (lppStream)
*lppStream = NULL;
......@@ -857,6 +878,9 @@ BOOL WINAPI FGetComponentPath(LPCSTR component, LPCSTR qualifier, LPSTR dll_path
TRACE("%s %s %p %u %d\n", component, qualifier, dll_path, dll_path_length, install);
if (mapiFunctions.FGetComponentPath)
return mapiFunctions.FGetComponentPath(component, qualifier, dll_path, dll_path_length, install);
dll_path[0] = 0;
hmsi = LoadLibraryA("msi.dll");
......@@ -903,6 +927,9 @@ HRESULT WINAPI HrQueryAllRows(LPMAPITABLE lpTable, LPSPropTagArray lpPropTags,
LPSRestriction lpRestriction, LPSSortOrderSet lpSortOrderSet,
LONG crowsMax, LPSRowSet *lppRows)
{
if (mapiFunctions.HrQueryAllRows)
return mapiFunctions.HrQueryAllRows(lpTable, lpPropTags, lpRestriction, lpSortOrderSet, crowsMax, lppRows);
FIXME("(%p, %p, %p, %p, %d, %p): stub\n", lpTable, lpPropTags, lpRestriction, lpSortOrderSet, crowsMax, lppRows);
*lppRows = NULL;
return MAPI_E_CALL_FAILED;
......@@ -1057,7 +1084,20 @@ void load_mapi_providers(void)
mapiFunctions.MAPILogonEx = (void*) GetProcAddress(mapi_ex_provider, "MAPILogonEx");
mapiFunctions.MAPIUninitialize = (void*) GetProcAddress(mapi_ex_provider, "MAPIUninitialize");
mapiFunctions.DeinitMapiUtil = (void*) GetProcAddress(mapi_ex_provider, "DeinitMapiUtil@0");
mapiFunctions.DllCanUnloadNow = (void*) GetProcAddress(mapi_ex_provider, "DllCanUnloadNow");
mapiFunctions.DllGetClassObject = (void*) GetProcAddress(mapi_ex_provider, "DllGetClassObject");
mapiFunctions.FGetComponentPath = (void*) GetProcAddress(mapi_ex_provider, "FGetComponentPath");
mapiFunctions.HrThisThreadAdviseSink = (void*) GetProcAddress(mapi_ex_provider, "HrThisThreadAdviseSink@8");
mapiFunctions.HrQueryAllRows = (void*) GetProcAddress(mapi_ex_provider, "HrQueryAllRows@24");
mapiFunctions.MAPIAdminProfiles = (void*) GetProcAddress(mapi_ex_provider, "MAPIAdminProfiles");
mapiFunctions.MAPIAllocateBuffer = (void*) GetProcAddress(mapi_ex_provider, "MAPIAllocateBuffer");
mapiFunctions.MAPIAllocateMore = (void*) GetProcAddress(mapi_ex_provider, "MAPIAllocateMore");
mapiFunctions.MAPIFreeBuffer = (void*) GetProcAddress(mapi_ex_provider, "MAPIFreeBuffer");
mapiFunctions.MAPIGetDefaultMalloc = (void*) GetProcAddress(mapi_ex_provider, "MAPIGetDefaultMalloc@0");
mapiFunctions.MAPIOpenLocalFormContainer = (void *) GetProcAddress(mapi_ex_provider, "MAPIOpenLocalFormContainer");
mapiFunctions.OpenStreamOnFile = (void*) GetProcAddress(mapi_ex_provider, "OpenStreamOnFile@24");
mapiFunctions.ScInitMapiUtil = (void*) GetProcAddress(mapi_ex_provider, "ScInitMapiUtil@4");
}
cleanUp:
......
......@@ -44,7 +44,20 @@ typedef struct MAPI_FUNCTIONS {
LPMAPISENDDOCUMENTS MAPISendDocuments;
LPMAPIUNINITIALIZE MAPIUninitialize;
HRESULT (WINAPI *DllGetClassObject)(REFCLSID, REFIID, LPVOID *);
VOID (WINAPI *DeinitMapiUtil) (void);
HRESULT (WINAPI *DllCanUnloadNow) (void);
HRESULT (WINAPI *DllGetClassObject) (REFCLSID, REFIID, LPVOID *);
BOOL (WINAPI *FGetComponentPath) (LPCSTR, LPCSTR, LPSTR, DWORD, BOOL);
HRESULT (WINAPI *MAPIAdminProfiles) (ULONG, LPPROFADMIN *);
SCODE (WINAPI *MAPIAllocateBuffer) (ULONG, LPVOID *);
SCODE (WINAPI *MAPIAllocateMore) (ULONG, LPVOID, LPVOID *);
ULONG (WINAPI *MAPIFreeBuffer) (LPVOID);
LPMALLOC (WINAPI *MAPIGetDefaultMalloc) (void);
HRESULT (WINAPI *MAPIOpenLocalFormContainer) (LPVOID *);
HRESULT (WINAPI *HrThisThreadAdviseSink) (LPMAPIADVISESINK, LPMAPIADVISESINK*);
HRESULT (WINAPI *HrQueryAllRows) (LPMAPITABLE, LPSPropTagArray, LPSRestriction, LPSSortOrderSet, LONG, LPSRowSet *);
HRESULT (WINAPI *OpenStreamOnFile) (LPALLOCATEBUFFER, LPFREEBUFFER, ULONG, LPWSTR, LPWSTR, LPSTREAM *);
SCODE (WINAPI *ScInitMapiUtil) (ULONG ulReserved);
} MAPI_FUNCTIONS;
extern MAPI_FUNCTIONS mapiFunctions;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment