/****************************************************************************************
 * NAME:	NapUtil.cpp
 *
 * OVERVIEW
 *
 * Internet Authentication Server: utility functions
 *
 * Copyright (C) Microsoft Corporation, 1998 - 1999 .  All Rights Reserved.
 *
 * History:	
 *				2/12/98		Created by	Byao	
 *****************************************************************************************/

#include "Precompiled.h"
#include "mmcUtility.h"
#include "NapUtil.h"

//+---------------------------------------------------------------------------
//
// Function:  GetSdoInterfaceProperty
//
// Synopsis:  Get an interface property from a SDO through its ISdo interface
//
// Arguments: ISdo *pISdo - Pointer to ISdo
//            LONG lPropId - property id
//            REFIID riid - ref iid
//            void ** ppvObject - pointer to the requested interface property
//
// Returns:   HRESULT - 
//
// History:   Created Header    byao	2/12/98 11:12:55 PM
//
//+---------------------------------------------------------------------------
HRESULT GetSdoInterfaceProperty(ISdo *pISdo, 
								LONG lPropId, 
								REFIID riid, 
								void ** ppvInterface)
{
	CComVariant spVariant;
	CComBSTR	bstr;
	HRESULT		hr = S_OK;

	spVariant.vt = VT_DISPATCH;
	spVariant.pdispVal = NULL;
	hr = pISdo->GetProperty(lPropId, &spVariant);

	if ( FAILED(hr) ) 
	{
		ShowErrorDialog(NULL, IDS_ERROR_SDO_ERROR, NULL, hr );
		return hr;
	}

	_ASSERTE( spVariant.vt == VT_DISPATCH );

    // query the dispatch pointer for interface
	hr = spVariant.pdispVal->QueryInterface( riid, ppvInterface);
	if ( FAILED(hr) )
	{
		ShowErrorDialog(NULL,
						IDS_ERROR_SDO_ERROR_QUERYINTERFACE,
						NULL,
						hr
					);
		return hr;
	}

	
	spVariant.Clear();
	return S_OK;
}