// --aclcls.cpp-------------------------------------------------------------
//
// API entry points into the ACL Class Library (aclcls).
//
// Copyright (C) Microsoft Corp. 1986-1996. All rights reserved.
//
// ---------------------------------------------------------------------------
#include "edk.h"
#include "srowlst.h"
#include "aclclsf.h"
#include "aclcls.chk"
//
// Functions
//
// $--HrFolderACLsOpen-----------------------------------------------------
//
// DESCRIPTION:Get a ptr to an object which implements the IExchangeFolderACLs
//interface defined in aclcls.h.
//
// INPUT:
//
// [lpSession] -- Pointer to MAPI session.
// [lpMDB]-- Ptr to message store containing folder.
// [cbentryid]-- Number of bytes in folder's entry identifier.
// [lpentryid]-- Folder's entry identifier.
//
// OUTPUT:
//
// [lppFolderACLs]-- Ptr to object which supports interface;
// NULL if none.
//
// RETURNS: NOERRORif successful;
//E_INVALIDARGif bad input;
//E_OUTOFMEMORYif not enough memory;
//E_NOINTERFACEif acl table does not exist on folder;
// E_FAILotherwise.
//
//-----------------------------------------------------------------------------
STDAPI
HrFolderACLsOpen(// RETURNS: HRESULT
IN LPMAPISESSION lpSession, // MAPI session pointer
INLPMDBlpMDB,// MAPI MDB store ptr
INULONGcbentryid,// # bytes in entry ID
INLPENTRYIDlpentryid,// entry ID ptr
OUTLPFOLDERACLS FAR *lppFolderACLs// IExchangeFolderACLs ptr ptr
)
{
HRESULThr =NOERROR;
CFolderACLs FAR *pFolderACLs =NULL;
DEBUGPUBLIC("HrFolderACLsOpen().\n");
hr = CHK_HrFolderACLsOpen(cbentryid, lpentryid, lppFolderACLs);
if (FAILED(hr))
RETURN(hr);
*lppFolderACLs = NULL;
// Initialize controlling class object.
pFolderACLs = new CFolderACLs();
if (pFolderACLs == NULL)
{
hr = HR_LOG(E_OUTOFMEMORY);
goto cleanup;
}
// Open the folder in the controlling class object.
hr = pFolderACLs->HrOpen(lpSession, lpMDB, cbentryid, lpentryid);
if (FAILED(hr))
goto cleanup;
// Give the user access to the programmer interface (CIExchangeFolderACLs)
// on the controlling CFolderACLs object.
hr = pFolderACLs->QueryInterface(IID_IExchangeFolderACLs,
(LPVOID FAR *)lppFolderACLs);
// Ref count now 2.
if (FAILED(hr))
goto cleanup;
ASSERT_READ_PTR_OR_NULL(*lppFolderACLs, sizeof(LPFOLDERACLS),
"Bad lppFolderACLs.");
cleanup:
// Release our copy of the CFolderACLs object.
ULRELEASE(pFolderACLs);// Ref count now 1.
RETURN(hr);
}