windows-nt/Source/XPSP1/NT/admin/admt/workobj/mapiprof.cpp
2020-09-26 16:20:57 +08:00

259 lines
6.1 KiB
C++

/*---------------------------------------------------------------------------
File: ExMapiProf.cpp
Comments: implementation of TMapiProfile and TAddressBook classes
(c) Copyright 1995-1998, Mission Critical Software, Inc., All Rights Reserved
Proprietary and confidential to Mission Critical Software, Inc.
REVISION LOG ENTRY
Revision By: Christy Boles
Revised on 09-Sep-98 09:38:21
---------------------------------------------------------------------------
*/
#include "stdafx.h"
#include "Common.hpp"
#include "Ustring.hpp"
#include <MapiUtil.h> // For HrQueryAllRows
//#include <edkmdb.h>
//#include <proptag.h>
#include <emsabtag.h>
#include <mspab.h>
#include "edk2.hpp"
#include "MAPIProf.hpp"
HWND gHWND = NULL;
HINSTANCE hMapi = NULL;
LPMAPIALLOCATEBUFFER pMAPIAllocateBuffer = NULL;
LPMAPIFREEBUFFER pMAPIFreeBuffer = NULL;
LPMAPIINITIALIZE pMAPIInitialize = NULL;
LPMAPIUNINITIALIZE pMAPIUninitialize = NULL;
LPMAPILOGONEX pMAPILogonEx = NULL;
LPMAPIADMINPROFILES pMAPIAdminProfiles = NULL;
LPFREEPADRLIST pFreePadrlist = NULL;
LPFREEPROWS pFreeProws = NULL;
LPSCDUPPROPSET pScDupPropset = NULL;
LPHRQUERYALLROWS pHrQueryAllRows = NULL;
LPULRELEASE pUlRelease = NULL;
BOOL LoadMAPI()
{
BOOL success = TRUE;
if ( ! hMapi )
{
hMapi = LoadLibrary(_T("MAPI32.DLL"));
if ( hMapi )
{
do { // once (only show one error message)
pMAPIAllocateBuffer=(LPMAPIALLOCATEBUFFER)GetProcAddress(hMapi,"MAPIAllocateBuffer");
if ( ! pMAPIAllocateBuffer )
{
success = FALSE;
break;
}
pMAPIFreeBuffer = (LPMAPIFREEBUFFER)GetProcAddress(hMapi,"MAPIFreeBuffer");
if ( ! pMAPIFreeBuffer )
{
success = FALSE;
break;
}
pMAPIInitialize = (LPMAPIINITIALIZE)GetProcAddress(hMapi,"MAPIInitialize");
if ( ! pMAPIInitialize )
{
success = FALSE;
break;
}
pMAPIUninitialize = (LPMAPIUNINITIALIZE)GetProcAddress(hMapi,"MAPIUninitialize");
if ( ! pMAPIUninitialize )
{
success = FALSE;
break;
}
pMAPILogonEx = (LPMAPILOGONEX)GetProcAddress(hMapi,"MAPILogonEx");
if ( ! pMAPILogonEx )
{
success = FALSE;
break;
}
pMAPIAdminProfiles = (LPMAPIADMINPROFILES)GetProcAddress(hMapi,"MAPIAdminProfiles");
if ( ! pMAPIAdminProfiles )
{
success = FALSE;
break;
}
pFreePadrlist = (LPFREEPADRLIST)GetProcAddress(hMapi,"FreePadrlist@4");
if ( ! pFreePadrlist )
{
success = FALSE;
break;
}
pFreeProws = (LPFREEPROWS)GetProcAddress(hMapi,"FreeProws@4");
if ( ! pFreeProws )
{
success = FALSE;
break;
}
pScDupPropset = (LPSCDUPPROPSET)GetProcAddress(hMapi,"ScDupPropset@16");
if ( ! pScDupPropset )
{
success = FALSE;
break;
}
pHrQueryAllRows = (LPHRQUERYALLROWS)GetProcAddress(hMapi,"HrQueryAllRows@24");
if ( ! pHrQueryAllRows )
{
success = FALSE;
break;
}
pUlRelease = (LPULRELEASE)GetProcAddress(hMapi,"UlRelease@4");
if ( ! pUlRelease )
{
success = FALSE;
break;
}
}
while (FALSE);
}
else
{
success = FALSE;
}
if ( hMapi && !success )
{
ReleaseMAPI();
}
}
return (hMapi!=NULL && success);
}
void ReleaseMAPI()
{
if ( hMapi )
{
FreeLibrary(hMapi);
hMapi = NULL;
pMAPIAllocateBuffer = NULL;
pMAPIFreeBuffer = NULL;
pMAPIInitialize = NULL;
pMAPIUninitialize = NULL;
pMAPILogonEx = NULL;
pMAPIAdminProfiles = NULL;
pFreePadrlist = NULL;
pFreeProws = NULL;
pScDupPropset = NULL;
pHrQueryAllRows = NULL;
pUlRelease = NULL;
}
}
DWORD TMapiProfile::Initialize()
{
DWORD rc = 0;
MAPIINIT_0 MAPIINIT = { 0, MAPI_MULTITHREAD_NOTIFICATIONS};
if ( ! m_bMapiInitialized )
{
rc = (*pMAPIInitialize)(&MAPIINIT);
m_bMapiInitialized = TRUE;
}
return rc;
}
DWORD TMapiProfile::Uninitialize()
{
if ( m_bMapiInitialized )
{
(*pMAPIUninitialize)();
m_bMapiInitialized = FALSE;
}
return 0;
}
DWORD TMapiProfile::Logon(BOOL bMarkForDelete)
{
// start a new session
HRESULT hr;
DWORD rc = 0;
BOOL error = FALSE;
Initialize();
FLAGS fLogonOptions = MAPI_NO_MAIL | MAPI_EXTENDED | MAPI_NEW_SESSION;
WCHAR pszMapiProfile[200] = L"";
if ( m_profileName )
{
safecopy(pszMapiProfile,m_profileName);
fLogonOptions |= MAPI_EXPLICIT_PROFILE;
}
else
{
fLogonOptions |= MAPI_USE_DEFAULT;
}
hr = (*pMAPILogonEx)(0, (WCHAR *)pszMapiProfile, NULL, fLogonOptions | MAPI_UNICODE, &m_session);
if (FAILED(hr))
{
error = TRUE;
}
if ( error )
{
rc = (DWORD)hr;
m_session = NULL;
}
else
{
m_bLoggedOn = TRUE;
}
return rc;
}
DWORD TMapiProfile::Logoff()
{
if ( m_session )
{
// HRESULT hr = m_session->Logoff(0,0,0);
m_session->Logoff(0,0,0);
m_bLoggedOn = FALSE;
m_session=NULL;
}
Uninitialize();
return 0;
}
DWORD
TMapiProfile::SetProfile(TCHAR * profile, BOOL create)
{
DWORD rc=0;
safecopy(m_profileName,profile);
return rc;
}
TMapiProfile::~TMapiProfile()
{
if ( m_bLoggedOn )
{
Logoff();
}
Uninitialize();
}