|
|
/*
* WRAP.C * * Wrapped IProp */
#include "_apipch.h"
/*********************************************************************
* * The actual Wrapped IMAPIProp methods * */
//
// Wrapped IMAPIProp jump table is defined here...
// Try to use as much of IAB as possible.
//
WRAP_Vtbl vtblWRAP_OOP = { VTABLE_FILL (WRAP_QueryInterface_METHOD *) IAB_QueryInterface, WRAP_AddRef, WRAP_Release, (WRAP_GetLastError_METHOD *) IAB_GetLastError, WRAP_SaveChanges, WRAP_GetProps, WRAP_GetPropList, WRAP_OpenProperty, WRAP_SetProps, WRAP_DeleteProps, WRAP_CopyTo, WRAP_CopyProps, WRAP_GetNamesFromIDs, WRAP_GetIDsFromNames, };
/**************************************************
* * WRAP_AddRef * Increment lcInit * */ STDMETHODIMP_(ULONG) WRAP_AddRef(LPWRAP lpWRAP) {
#ifdef PARAMETER_VALIDATION
// Check to see if it has a jump table
if (IsBadReadPtr(lpWRAP, sizeof(LPVOID))) { //No jump table found
return(1); }
// Check to see if the jump table has at least sizeof IUnknown
if (IsBadReadPtr(lpWRAP->lpVtbl, 3 * sizeof(LPVOID))) { // Jump table not derived from IUnknown
return(1); }
// Check to see if the method is the same
if (WRAP_AddRef != lpWRAP->lpVtbl->AddRef) { // Wrong object - the object passed doesn't have this
// method.
return(1); }
#endif // PARAMETER_VALIDATION
EnterCriticalSection(&lpWRAP->cs);
++lpWRAP->lcInit;
LeaveCriticalSection(&lpWRAP->cs);
return(lpWRAP->lcInit); }
STDMETHODIMP_(ULONG) WRAP_Release (LPWRAP lpWRAP) {
#if !defined(NO_VALIDATION)
// Make sure the object is valid.
if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, Release, lpVtbl)) { return(1); } #endif
EnterCriticalSection(&lpWRAP->cs);
--lpWRAP->lcInit;
if (lpWRAP->lcInit == 0) {
UlRelease(lpWRAP->lpPropData);
//
// Need to free the object
//
LeaveCriticalSection(&lpWRAP->cs); DeleteCriticalSection(&lpWRAP->cs); FreeBufferAndNull(&lpWRAP); return(0); }
LeaveCriticalSection(&lpWRAP->cs); return(lpWRAP->lcInit); }
// IProperty
STDMETHODIMP WRAP_SaveChanges (LPWRAP lpWRAP, ULONG ulFlags) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, SaveChanges, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->SaveChanges( lpWRAP->lpPropData, ulFlags); }
STDMETHODIMP WRAP_GetProps (LPWRAP lpWRAP, LPSPropTagArray lpPropTagArray, ULONG ulFlags, ULONG * lpcValues, LPSPropValue * lppPropArray) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, GetProps, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->GetProps( lpWRAP->lpPropData, lpPropTagArray, ulFlags, lpcValues, lppPropArray); }
STDMETHODIMP WRAP_GetPropList (LPWRAP lpWRAP, ULONG ulFlags, LPSPropTagArray * lppPropTagArray) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, GetPropList, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->GetPropList( lpWRAP->lpPropData, ulFlags, lppPropTagArray); }
STDMETHODIMP WRAP_OpenProperty (LPWRAP lpWRAP, ULONG ulPropTag, LPCIID lpiid, ULONG ulInterfaceOptions, ULONG ulFlags, LPUNKNOWN * lppUnk) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, OpenProperty, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->OpenProperty( lpWRAP->lpPropData, ulPropTag, lpiid, ulInterfaceOptions, ulFlags, lppUnk); }
STDMETHODIMP WRAP_SetProps (LPWRAP lpWRAP, ULONG cValues, LPSPropValue lpPropArray, LPSPropProblemArray * lppProblems) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, SetProps, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->SetProps( lpWRAP->lpPropData, cValues, lpPropArray, lppProblems); }
STDMETHODIMP WRAP_DeleteProps (LPWRAP lpWRAP, LPSPropTagArray lpPropTagArray, LPSPropProblemArray * lppProblems) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, DeleteProps, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->DeleteProps( lpWRAP->lpPropData, lpPropTagArray, lppProblems); }
STDMETHODIMP WRAP_CopyTo ( LPWRAP lpWRAP, ULONG ciidExclude, LPCIID rgiidExclude, LPSPropTagArray lpExcludeProps, ULONG_PTR ulUIParam, LPMAPIPROGRESS lpProgress, LPCIID lpInterface, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray * lppProblems) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, CopyTo, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
// Make sure we're not copying to ourselves
if ((LPVOID)lpWRAP == (LPVOID)lpDestObj) { DebugTrace( TEXT("OOP WRAP_CopyTo(): Copying to self is not supported\n")); return ResultFromScode(MAPI_E_NO_ACCESS); }
return lpWRAP->lpPropData->lpVtbl->CopyTo( lpWRAP->lpPropData, ciidExclude, rgiidExclude, lpExcludeProps, ulUIParam, lpProgress, lpInterface, lpDestObj, ulFlags, lppProblems); }
STDMETHODIMP WRAP_CopyProps ( LPWRAP lpWRAP, LPSPropTagArray lpIncludeProps, ULONG_PTR ulUIParam, LPMAPIPROGRESS lpProgress, LPCIID lpInterface, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray * lppProblems) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, CopyProps, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->CopyProps( lpWRAP->lpPropData, lpIncludeProps, ulUIParam, lpProgress, lpInterface, lpDestObj, ulFlags, lppProblems); }
STDMETHODIMP WRAP_GetNamesFromIDs ( LPWRAP lpWRAP, LPSPropTagArray * lppPropTags, LPGUID lpPropSetGuid, ULONG ulFlags, ULONG * lpcPropNames, LPMAPINAMEID ** lpppPropNames) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, GetNamesFromIDs, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->GetNamesFromIDs( lpWRAP->lpPropData, lppPropTags, lpPropSetGuid, ulFlags, lpcPropNames, lpppPropNames); }
STDMETHODIMP WRAP_GetIDsFromNames ( LPWRAP lpWRAP, ULONG cPropNames, LPMAPINAMEID * lppPropNames, ULONG ulFlags, LPSPropTagArray * lppPropTags) {
#if !defined(NO_VALIDATION)
/* Make sure the object is valid.
*/ if (BAD_STANDARD_OBJ(lpWRAP, WRAP_, GetIDsFromNames, lpVtbl)) { return ResultFromScode(MAPI_E_INVALID_PARAMETER); } #endif
return lpWRAP->lpPropData->lpVtbl->GetIDsFromNames( lpWRAP->lpPropData, cPropNames, lppPropNames, ulFlags, lppPropTags); }
|