You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
727 lines
16 KiB
727 lines
16 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
FaxInboundRoutingExtension.cpp
|
|
|
|
Abstract:
|
|
|
|
Implementation of CFaxInboundRoutingExtension class.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG) Jul, 2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "stdafx.h"
|
|
#include "FaxComEx.h"
|
|
#include "FaxInboundRoutingExtension.h"
|
|
|
|
|
|
//
|
|
//===================== GET METHODS =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_Methods(
|
|
/*[out, retval]*/ VARIANT *pvMethods
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_Methods
|
|
|
|
Routine description:
|
|
|
|
Return array of all Method GUIDS exposed by the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pvMethods [out] - Ptr to put Variant containing Safearray of Methods
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_Methods"), hr);
|
|
|
|
//
|
|
// Check that we can write to the given pointer
|
|
//
|
|
if (::IsBadWritePtr(pvMethods, sizeof(VARIANT)))
|
|
{
|
|
hr = E_POINTER;
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
CALL_FAIL(GENERAL_ERR, _T("::IsBadWritePtr(pvMethods, sizeof(VARIANT))"), hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Allocate the safe array : vector of BSTR
|
|
//
|
|
SAFEARRAY *psaResult;
|
|
hr = SafeArrayCopy(m_psaMethods, &psaResult);
|
|
if (FAILED(hr) || !psaResult)
|
|
{
|
|
if (!psaResult)
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
CALL_FAIL(MEM_ERR, _T("SafeArrayCopy(m_psaMethods, &psaResult)"), hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Return the Safe Array inside the VARIANT we got
|
|
//
|
|
VariantInit(pvMethods);
|
|
pvMethods->vt = VT_BSTR | VT_ARRAY;
|
|
pvMethods->parray = psaResult;
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET STATUS =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_Status(
|
|
FAX_PROVIDER_STATUS_ENUM *pStatus
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_Status
|
|
|
|
Routine description:
|
|
|
|
Return Status of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pStatus [out] - Ptr to put Status value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_Status"), hr);
|
|
|
|
//
|
|
// Check that we have got good Ptr
|
|
//
|
|
if (::IsBadWritePtr(pStatus, sizeof(FAX_PROVIDER_STATUS_ENUM)))
|
|
{
|
|
hr = E_POINTER;
|
|
CALL_FAIL(GENERAL_ERR, _T("::IsBadWritePtr(pStatus, sizeof(FAX_PROVIDER_STATUS_ENUM))"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
|
|
*pStatus = m_Status;
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//========================= GET IMAGE NAME ========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_ImageName(
|
|
BSTR *pbstrImageName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_ImageName
|
|
|
|
Routine description:
|
|
|
|
Return Image Name of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrImageName [out] - Ptr to put the ImageName
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_ImageName"), hr);
|
|
hr = GetBstr(pbstrImageName, m_bstrImageName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//========================= GET FRIENDLY NAME ========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_FriendlyName(
|
|
BSTR *pbstrFriendlyName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_FriendlyName
|
|
|
|
Routine description:
|
|
|
|
Return Friendly Name of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrFriendlyName [out] - Ptr to put the FriendlyName
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_FriendlyName"), hr);
|
|
hr = GetBstr(pbstrFriendlyName, m_bstrFriendlyName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//========================= GET UNIQUE NAME ========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_UniqueName(
|
|
BSTR *pbstrUniqueName
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_UniqueName
|
|
|
|
Routine description:
|
|
|
|
Return Unique Name of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pbstrUniqueName [out] - Ptr to put the Unique Name
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_UniquName"), hr);
|
|
hr = GetBstr(pbstrUniqueName, m_bstrUniqueName);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET DEBUG =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_Debug(
|
|
VARIANT_BOOL *pbDebug
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_Debug
|
|
|
|
Routine description:
|
|
|
|
Return if the IR Extension is compiled in Debug version
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pbDebug [out] - Ptr to put Debug value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_Debug"), hr);
|
|
|
|
hr = GetVariantBool(pbDebug, m_bDebug);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET MAJOR BUILD =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_MajorBuild(
|
|
long *plMajorBuild
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_MajorBuild
|
|
|
|
Routine description:
|
|
|
|
Return MajorBuild of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
plMajorBuild [out] - Ptr to put MajorBuild value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_MajorBuild"), hr);
|
|
|
|
hr = GetLong(plMajorBuild, m_dwMajorBuild);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET MINOR BUILD =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_MinorBuild(
|
|
long *plMinorBuild
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_MinorBuild
|
|
|
|
Routine description:
|
|
|
|
Return MinorBuild of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
plMinorBuild [out] - Ptr to put MinorBuild value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_MinorBuild"), hr);
|
|
|
|
hr = GetLong(plMinorBuild, m_dwMinorBuild);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET MAJOR VERSION =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_MajorVersion(
|
|
long *plMajorVersion
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_MajorVersion
|
|
|
|
Routine description:
|
|
|
|
Return MajorVersion of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
plMajorVersion [out] - Ptr to put MajorVersion value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_MajorVersion"), hr);
|
|
|
|
hr = GetLong(plMajorVersion, m_dwMajorVersion);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET MINOR VERSION =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_MinorVersion(
|
|
long *plMinorVersion
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_MinorVersion
|
|
|
|
Routine description:
|
|
|
|
Return MinorVersion of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
plMinorVersion [out] - Ptr to put MinorVersionvalue
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_MinorVersion"), hr);
|
|
|
|
hr = GetLong(plMinorVersion, m_dwMinorVersion);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//===================== GET INIT ERROR CODE =========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::get_InitErrorCode(
|
|
long *plInitErrorCode
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::get_InitErrorCode
|
|
|
|
Routine description:
|
|
|
|
Return InitErrorCode of the IR Extension
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
plInitErrorCode [out] - Ptr to put InitErrorCode value
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::get_InitErrorCode"), hr);
|
|
|
|
hr = GetLong(plInitErrorCode, m_dwLastError);
|
|
if (FAILED(hr))
|
|
{
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//==================== INIT ========================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::Init(
|
|
FAX_ROUTING_EXTENSION_INFO *pInfo,
|
|
FAX_GLOBAL_ROUTING_INFO *pMethods,
|
|
DWORD dwNum
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtesnion::Init
|
|
|
|
Routine description:
|
|
|
|
Initialize the IR Extension Object with given Information.
|
|
Allocates memory and stores given pInfo.
|
|
Find in the pMethods its own Methods, create Variant of SafeArray containing them.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jul, 2000
|
|
|
|
Arguments:
|
|
|
|
pInfo [in] -- the Info of the IR Extension Object
|
|
pMethods [in] -- array of all available Methods
|
|
dwNum [in] -- number of elements in pMethods array
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DBG_ENTER (TEXT("CFaxInboundRoutingExtension::Init"), hr);
|
|
|
|
//
|
|
// Copy the FAX_ROUTING_EXTENSION_INFO
|
|
//
|
|
m_dwLastError = pInfo->dwLastError;
|
|
m_Status = FAX_PROVIDER_STATUS_ENUM(pInfo->Status);
|
|
|
|
if (!(pInfo->Version.bValid))
|
|
{
|
|
m_dwMajorBuild = 0;
|
|
m_dwMinorBuild = 0;
|
|
m_dwMajorVersion = 0;
|
|
m_dwMinorVersion = 0;
|
|
m_bDebug = VARIANT_FALSE;
|
|
}
|
|
else
|
|
{
|
|
m_dwMajorBuild = pInfo->Version.wMajorBuildNumber;
|
|
m_dwMinorBuild = pInfo->Version.wMinorBuildNumber;
|
|
m_dwMajorVersion = pInfo->Version.wMajorVersion;
|
|
m_dwMinorVersion = pInfo->Version.wMinorVersion;
|
|
m_bDebug = bool2VARIANT_BOOL((pInfo->Version.dwFlags & FAX_VER_FLAG_CHECKED) ? true : false);
|
|
}
|
|
|
|
m_bstrImageName = pInfo->lpctstrImageName;
|
|
m_bstrFriendlyName = pInfo->lpctstrFriendlyName;
|
|
m_bstrUniqueName = pInfo->lpctstrExtensionName;
|
|
if ( (pInfo->lpctstrImageName && !m_bstrImageName) ||
|
|
(pInfo->lpctstrFriendlyName && !m_bstrFriendlyName) ||
|
|
(pInfo->lpctstrExtensionName && !m_bstrUniqueName) )
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
CALL_FAIL(MEM_ERR, _T("CComBSTR::operator=()"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// count the Methods of the IR Extension
|
|
//
|
|
DWORD dwCount = 0;
|
|
for (DWORD i=0 ; i<dwNum ; i++ )
|
|
{
|
|
//
|
|
// We may only compare Friendly Name and Image Name.
|
|
// This is potentially a problem.
|
|
// Extensions should be distinguished by their Unique Name.
|
|
//
|
|
if ( (_tcscmp(pMethods[i].ExtensionFriendlyName, m_bstrFriendlyName) == 0) &&
|
|
(_tcscmp(pMethods[i].ExtensionImageName, m_bstrImageName) == 0) )
|
|
{
|
|
dwCount++;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Allocate the safe array : vector of BSTR
|
|
//
|
|
m_psaMethods = ::SafeArrayCreateVector(VT_BSTR, 0, dwCount);
|
|
if (!m_psaMethods)
|
|
{
|
|
//
|
|
// Not Enough Memory
|
|
//
|
|
hr = E_OUTOFMEMORY;
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
CALL_FAIL(MEM_ERR, _T("::SafeArrayCreateVector(VT_BSTR, 0, dwCount)"), hr);
|
|
return hr;
|
|
}
|
|
|
|
if ( dwCount>0 )
|
|
{
|
|
|
|
//
|
|
// get Access to the elements of the Safe Array
|
|
//
|
|
BSTR *pbstrElement;
|
|
hr = ::SafeArrayAccessData(m_psaMethods, (void **) &pbstrElement);
|
|
if (FAILED(hr))
|
|
{
|
|
//
|
|
// Failed to access safearray
|
|
//
|
|
hr = E_FAIL;
|
|
CALL_FAIL(GENERAL_ERR, _T("::SafeArrayAccessData(m_psaMethods, &pbstrElement)"), hr);
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Fill the array with values
|
|
//
|
|
DWORD idx = 0;
|
|
for ( i=0 ; i<dwNum ; i++ )
|
|
{
|
|
//
|
|
// Like the previous comparison :
|
|
// We may only compare Friendly Name and Image Name.
|
|
// This is potentially a problem.
|
|
// Extensions should be distinguished by their Unique Name.
|
|
//
|
|
if ( (_tcscmp(pMethods[i].ExtensionFriendlyName, m_bstrFriendlyName) == 0) &&
|
|
(_tcscmp(pMethods[i].ExtensionImageName, m_bstrImageName) == 0) )
|
|
{
|
|
//
|
|
// Allocate memory for the GUID and store ptr to it in the SafeArray
|
|
//
|
|
BSTR bstrTmp = NULL;
|
|
bstrTmp = ::SysAllocString(pMethods[i].Guid);
|
|
if (pMethods[i].Guid && !bstrTmp)
|
|
{
|
|
//
|
|
// Not Enough Memory
|
|
//
|
|
hr = E_OUTOFMEMORY;
|
|
AtlReportError(CLSID_FaxInboundRoutingExtension, GetErrorMsgId(hr), IID_IFaxInboundRoutingExtension, hr);
|
|
CALL_FAIL(MEM_ERR, _T("::SysAllocString(pMethods[i].Guid)"), hr);
|
|
SafeArrayUnaccessData(m_psaMethods);
|
|
SafeArrayDestroy(m_psaMethods);
|
|
m_psaMethods = NULL;
|
|
return hr;
|
|
}
|
|
|
|
pbstrElement[idx] = bstrTmp;
|
|
idx++;
|
|
}
|
|
}
|
|
ATLASSERT(idx == dwCount);
|
|
|
|
//
|
|
// free the safearray from the access
|
|
//
|
|
hr = ::SafeArrayUnaccessData(m_psaMethods);
|
|
if (FAILED(hr))
|
|
{
|
|
CALL_FAIL(GENERAL_ERR, _T("::SafeArrayUnaccessData(m_psaMethods)"), hr);
|
|
return hr;
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
//==================== SUPPORT ERROR INFO =============================================
|
|
//
|
|
STDMETHODIMP
|
|
CFaxInboundRoutingExtension::InterfaceSupportsErrorInfo(
|
|
REFIID riid
|
|
)
|
|
/*++
|
|
|
|
Routine name : CFaxInboundRoutingExtension::InterfaceSupportsErrorInfo
|
|
|
|
Routine description:
|
|
|
|
ATL's implementation of Support Error Info.
|
|
|
|
Author:
|
|
|
|
Iv Garber (IvG), Jun, 2000
|
|
|
|
Arguments:
|
|
|
|
riid [in] - Reference to the Interface.
|
|
|
|
Return Value:
|
|
|
|
Standard HRESULT code
|
|
|
|
--*/
|
|
{
|
|
static const IID* arr[] =
|
|
{
|
|
&IID_IFaxInboundRoutingExtension
|
|
};
|
|
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
|
|
{
|
|
if (InlineIsEqualGUID(*arr[i],riid))
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|