mirror of https://github.com/tongzx/nt5src
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.
774 lines
18 KiB
774 lines
18 KiB
//****************************************************************************
|
|
//
|
|
// Module: ULS.DLL
|
|
// File: ulsapp.cpp
|
|
// Content: This file contains the Application object.
|
|
// History:
|
|
// Wed 17-Apr-1996 11:13:54 -by- Viroon Touranachun [viroont]
|
|
//
|
|
// Copyright (c) Microsoft Corporation 1996-1997
|
|
//
|
|
//****************************************************************************
|
|
|
|
#include "ulsp.h"
|
|
#include "ulsapp.h"
|
|
#include "ulsprot.h"
|
|
#include "attribs.h"
|
|
#include "callback.h"
|
|
|
|
//****************************************************************************
|
|
// Event Notifiers
|
|
//****************************************************************************
|
|
//
|
|
//****************************************************************************
|
|
// HRESULT
|
|
// OnNotifyGetProtocolResult (IUnknown *pUnk, void *pv)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
HRESULT
|
|
OnNotifyGetProtocolResult (IUnknown *pUnk, void *pv)
|
|
{
|
|
POBJRINFO pobjri = (POBJRINFO)pv;
|
|
|
|
((IULSApplicationNotify*)pUnk)->GetProtocolResult(pobjri->uReqID,
|
|
(IULSAppProtocol *)pobjri->pv,
|
|
pobjri->hResult);
|
|
return S_OK;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// HRESULT
|
|
// OnNotifyEnumProtocolsResult (IUnknown *pUnk, void *pv)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
HRESULT
|
|
OnNotifyEnumProtocolsResult (IUnknown *pUnk, void *pv)
|
|
{
|
|
CEnumNames *penum = NULL;
|
|
PENUMRINFO peri = (PENUMRINFO)pv;
|
|
HRESULT hr = peri->hResult;
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// Create a Application enumerator
|
|
//
|
|
penum = new CEnumNames;
|
|
|
|
if (penum != NULL)
|
|
{
|
|
hr = penum->Init((LPTSTR)peri->pv, peri->cItems);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
penum->AddRef();
|
|
}
|
|
else
|
|
{
|
|
delete penum;
|
|
penum = NULL;
|
|
};
|
|
}
|
|
else
|
|
{
|
|
hr = ULS_E_MEMORY;
|
|
};
|
|
};
|
|
|
|
// Notify the sink object
|
|
//
|
|
((IULSApplicationNotify*)pUnk)->EnumProtocolsResult(peri->uReqID,
|
|
penum != NULL ?
|
|
(IEnumULSNames *)penum :
|
|
NULL,
|
|
hr);
|
|
|
|
if (penum != NULL)
|
|
{
|
|
penum->Release();
|
|
};
|
|
return hr;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// Class Implementation
|
|
//****************************************************************************
|
|
//
|
|
//****************************************************************************
|
|
// CUlsApp::CUlsApp (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
CUlsApp::CUlsApp (void)
|
|
{
|
|
cRef = 0;
|
|
szServer = NULL;
|
|
szUser = NULL;
|
|
guid = GUID_NULL;
|
|
szName = NULL;
|
|
szMimeType = NULL;
|
|
pAttrs = NULL;
|
|
pConnPt = NULL;
|
|
|
|
return;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// CUlsApp::~CUlsApp (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
CUlsApp::~CUlsApp (void)
|
|
{
|
|
if (szServer != NULL)
|
|
FreeLPTSTR(szServer);
|
|
if (szUser != NULL)
|
|
FreeLPTSTR(szUser);
|
|
if (szName != NULL)
|
|
FreeLPTSTR(szName);
|
|
if (szMimeType != NULL)
|
|
FreeLPTSTR(szMimeType);
|
|
|
|
// Release attribute object
|
|
//
|
|
if (pAttrs != NULL)
|
|
{
|
|
pAttrs->Release();
|
|
};
|
|
|
|
// Release the connection point
|
|
//
|
|
if (pConnPt != NULL)
|
|
{
|
|
pConnPt->ContainerReleased();
|
|
((IConnectionPoint*)pConnPt)->Release();
|
|
};
|
|
|
|
return;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::Init (LPTSTR szServerName, LPTSTR szUserName, PLDAP_APPINFO pai)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::Init (LPTSTR szServerName, LPTSTR szUserName, PLDAP_APPINFO pai)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameter
|
|
//
|
|
if ((pai->uSize != sizeof(*pai)) ||
|
|
// (pai->guid == GUID_NULL) || // Allow null GUID for http register
|
|
(pai->uOffsetName == 0) ||
|
|
(pai->uOffsetMimeType == 0))
|
|
{
|
|
return ULS_E_PARAMETER;
|
|
};
|
|
|
|
if ((pai->cAttributes != 0) && (pai->uOffsetAttributes == 0))
|
|
{
|
|
return ULS_E_PARAMETER;
|
|
};
|
|
|
|
// Remember application GUID
|
|
//
|
|
guid = pai->guid;
|
|
|
|
// Remember the server name
|
|
//
|
|
hr = SetLPTSTR(&szServer, szServerName);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szUser, szUserName);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szName,
|
|
(LPCTSTR)(((PBYTE)pai)+pai->uOffsetName));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SetLPTSTR(&szMimeType,
|
|
(LPCTSTR)(((PBYTE)pai)+pai->uOffsetMimeType));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CAttributes *pNewAttrs;
|
|
|
|
// Build the attribute object
|
|
//
|
|
pNewAttrs = new CAttributes (ULS_ATTRACCESS_NAME_VALUE);
|
|
|
|
if (pNewAttrs != NULL)
|
|
{
|
|
if (pai->cAttributes != 0)
|
|
{
|
|
hr = pNewAttrs->SetAttributePairs((LPTSTR)(((PBYTE)pai)+pai->uOffsetAttributes),
|
|
pai->cAttributes);
|
|
};
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
pAttrs = pNewAttrs;
|
|
pNewAttrs->AddRef();
|
|
}
|
|
else
|
|
{
|
|
delete pNewAttrs;
|
|
};
|
|
}
|
|
else
|
|
{
|
|
hr = ULS_E_MEMORY;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// Make the connection point
|
|
//
|
|
pConnPt = new CConnectionPoint (&IID_IULSApplicationNotify,
|
|
(IConnectionPointContainer *)this);
|
|
if (pConnPt != NULL)
|
|
{
|
|
((IConnectionPoint*)pConnPt)->AddRef();
|
|
hr = NOERROR;
|
|
}
|
|
else
|
|
{
|
|
hr = ULS_E_MEMORY;
|
|
};
|
|
};
|
|
return hr;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::QueryInterface (REFIID riid, void **ppv)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::QueryInterface (REFIID riid, void **ppv)
|
|
{
|
|
*ppv = NULL;
|
|
|
|
if (riid == IID_IULSApplication || riid == IID_IUnknown)
|
|
{
|
|
*ppv = (IULSUser *) this;
|
|
}
|
|
else
|
|
{
|
|
if (riid == IID_IConnectionPointContainer)
|
|
{
|
|
*ppv = (IConnectionPointContainer *) this;
|
|
};
|
|
};
|
|
|
|
if (*ppv != NULL)
|
|
{
|
|
((LPUNKNOWN)*ppv)->AddRef();
|
|
return S_OK;
|
|
}
|
|
else
|
|
{
|
|
return ULS_E_NO_INTERFACE;
|
|
};
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP_(ULONG)
|
|
// CUlsApp::AddRef (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:17 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CUlsApp::AddRef (void)
|
|
{
|
|
cRef++;
|
|
return cRef;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP_(ULONG)
|
|
// CUlsApp::Release (void)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:26 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP_(ULONG)
|
|
CUlsApp::Release (void)
|
|
{
|
|
cRef--;
|
|
|
|
if (cRef == 0)
|
|
{
|
|
delete this;
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return cRef;
|
|
};
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::NotifySink (void *pv, CONN_NOTIFYPROC pfn)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::NotifySink (void *pv, CONN_NOTIFYPROC pfn)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
if (pConnPt != NULL)
|
|
{
|
|
hr = pConnPt->Notify(pv, pfn);
|
|
};
|
|
return hr;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::GetID (GUID *pGUID)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::GetID (GUID *pGUID)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (pGUID == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
*pGUID = guid;
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::GetName (BSTR *pbstrAppName)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::GetName (BSTR *pbstrAppName)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (pbstrAppName == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
return LPTSTR_to_BSTR(pbstrAppName, szName);
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::GetMimeType (BSTR *pbstrMimeType)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::GetMimeType (BSTR *pbstrMimeType)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (pbstrMimeType == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
return LPTSTR_to_BSTR(pbstrMimeType, szMimeType);
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::GetAttributes (IULSAttributes **ppAttributes)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::GetAttributes (IULSAttributes **ppAttributes)
|
|
{
|
|
// Validate parameter
|
|
//
|
|
if (ppAttributes == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
*ppAttributes = pAttrs;
|
|
pAttrs->AddRef();
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::GetProtocol (BSTR bstrProtocolID, ULONG *puReqID)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::GetProtocol (BSTR bstrProtocolID, IULSAttributes *pAttributes, ULONG *puReqID)
|
|
{
|
|
LDAP_ASYNCINFO ldai;
|
|
LPTSTR pszID;
|
|
HRESULT hr;
|
|
|
|
// Validate parameter
|
|
//
|
|
if (bstrProtocolID == NULL || puReqID == NULL)
|
|
return ULS_E_POINTER;
|
|
|
|
// Convert protocol name
|
|
//
|
|
hr = BSTR_to_LPTSTR(&pszID, bstrProtocolID);
|
|
if (hr != S_OK)
|
|
return hr;
|
|
|
|
// Get arbitrary attribute name list if any
|
|
//
|
|
ULONG cAttrNames = 0;
|
|
ULONG cbNames = 0;
|
|
TCHAR *pszAttrNameList = NULL;
|
|
if (pAttributes != NULL)
|
|
{
|
|
hr = ((CAttributes *) pAttributes)->GetAttributeList (&pszAttrNameList, &cAttrNames, &cbNames);
|
|
if (hr != S_OK)
|
|
return hr;
|
|
}
|
|
|
|
hr = ::UlsLdap_ResolveProtocol (szServer, szUser, szName, pszID,
|
|
pszAttrNameList, cAttrNames, &ldai);
|
|
if (hr != S_OK)
|
|
goto MyExit;
|
|
|
|
// If updating server was successfully requested, wait for the response
|
|
//
|
|
REQUESTINFO ri;
|
|
ZeroMemory (&ri, sizeof (ri));
|
|
ri.uReqType = WM_ULS_RESOLVE_PROTOCOL;
|
|
ri.uMsgID = ldai.uMsgID;
|
|
ri.pv = (PVOID) this;
|
|
ri.lParam = NULL;
|
|
|
|
// Remember this request
|
|
//
|
|
hr = g_pReqMgr->NewRequest(&ri);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// Make sure the objects do not disappear before we get the response
|
|
//
|
|
this->AddRef();
|
|
|
|
// Return the request ID
|
|
//
|
|
*puReqID = ri.uReqID;
|
|
};
|
|
|
|
MyExit:
|
|
|
|
if (pszAttrNameList != NULL)
|
|
FreeLPTSTR (pszAttrNameList);
|
|
|
|
if (pszID != NULL)
|
|
FreeLPTSTR(pszID);
|
|
|
|
return hr;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::GetProtocolResult (ULONG uReqID, PLDAP_PROTINFO_RES ppir)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:03 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::GetProtocolResult (ULONG uReqID, PLDAP_PROTINFO_RES ppir)
|
|
{
|
|
CUlsProt *pp;
|
|
OBJRINFO objri;
|
|
|
|
// Default to the server's result
|
|
//
|
|
objri.hResult = ppir->hResult;
|
|
|
|
if (SUCCEEDED(objri.hResult))
|
|
{
|
|
// The server returns PROTINFO, create a Application object
|
|
//
|
|
pp = new CUlsProt;
|
|
|
|
if (pp != NULL)
|
|
{
|
|
objri.hResult = pp->Init(szServer, szUser, szName, &ppir->lpi);
|
|
if (SUCCEEDED(objri.hResult))
|
|
{
|
|
pp->AddRef();
|
|
}
|
|
else
|
|
{
|
|
delete pp;
|
|
pp = NULL;
|
|
};
|
|
}
|
|
else
|
|
{
|
|
objri.hResult = ULS_E_MEMORY;
|
|
};
|
|
}
|
|
else
|
|
{
|
|
pp = NULL;
|
|
};
|
|
|
|
// Package the notification info
|
|
//
|
|
objri.uReqID = uReqID;
|
|
objri.pv = (void *)(pp == NULL ? NULL : (IULSAppProtocol *)pp);
|
|
NotifySink((void *)&objri, OnNotifyGetProtocolResult);
|
|
|
|
if (pp != NULL)
|
|
{
|
|
pp->Release();
|
|
};
|
|
return NOERROR;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::EnumProtocols (ULONG *puReqID)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::EnumProtocols (ULONG *puReqID)
|
|
{
|
|
LDAP_ASYNCINFO ldai;
|
|
HRESULT hr;
|
|
|
|
// Validate parameter
|
|
//
|
|
if (puReqID == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
hr = ::UlsLdap_EnumProtocols(szServer, szUser, szName, &ldai);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
REQUESTINFO ri;
|
|
|
|
// If updating server was successfully requested, wait for the response
|
|
//
|
|
ri.uReqType = WM_ULS_ENUM_PROTOCOLS;
|
|
ri.uMsgID = ldai.uMsgID;
|
|
ri.pv = (PVOID)this;
|
|
ri.lParam = (LPARAM)NULL;
|
|
|
|
hr = g_pReqMgr->NewRequest(&ri);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// Make sure the objects do not disappear before we get the response
|
|
//
|
|
this->AddRef();
|
|
|
|
// Return the request ID
|
|
//
|
|
*puReqID = ri.uReqID;
|
|
};
|
|
};
|
|
|
|
return hr;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::EnumProtocolsResult (ULONG uReqID, PLDAP_ENUM ple)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:14:08 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::EnumProtocolsResult (ULONG uReqID, PLDAP_ENUM ple)
|
|
{
|
|
ENUMRINFO eri;
|
|
|
|
// Package the notification info
|
|
//
|
|
eri.uReqID = uReqID;
|
|
eri.hResult = ple->hResult;
|
|
eri.cItems = ple->cItems;
|
|
eri.pv = (void *)(((PBYTE)ple)+ple->uOffsetItems);
|
|
NotifySink((void *)&eri, OnNotifyEnumProtocolsResult);
|
|
return NOERROR;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::EnumConnectionPoints(IEnumConnectionPoints **ppEnum)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:15:02 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::EnumConnectionPoints(IEnumConnectionPoints **ppEnum)
|
|
{
|
|
CEnumConnectionPoints *pecp;
|
|
HRESULT hr;
|
|
|
|
// Validate parameters
|
|
//
|
|
if (ppEnum == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
// Assume failure
|
|
//
|
|
*ppEnum = NULL;
|
|
|
|
// Create an enumerator
|
|
//
|
|
pecp = new CEnumConnectionPoints;
|
|
if (pecp == NULL)
|
|
return ULS_E_MEMORY;
|
|
|
|
// Initialize the enumerator
|
|
//
|
|
hr = pecp->Init((IConnectionPoint *)pConnPt);
|
|
if (FAILED(hr))
|
|
{
|
|
delete pecp;
|
|
return hr;
|
|
};
|
|
|
|
// Give it back to the caller
|
|
//
|
|
pecp->AddRef();
|
|
*ppEnum = pecp;
|
|
return S_OK;
|
|
}
|
|
|
|
//****************************************************************************
|
|
// STDMETHODIMP
|
|
// CUlsApp::FindConnectionPoint(REFIID riid, IConnectionPoint **ppcp)
|
|
//
|
|
// History:
|
|
// Wed 17-Apr-1996 11:15:09 -by- Viroon Touranachun [viroont]
|
|
// Created.
|
|
//****************************************************************************
|
|
|
|
STDMETHODIMP
|
|
CUlsApp::FindConnectionPoint(REFIID riid, IConnectionPoint **ppcp)
|
|
{
|
|
IID siid;
|
|
HRESULT hr;
|
|
|
|
// Validate parameters
|
|
//
|
|
if (ppcp == NULL)
|
|
{
|
|
return ULS_E_POINTER;
|
|
};
|
|
|
|
// Assume failure
|
|
//
|
|
*ppcp = NULL;
|
|
|
|
if (pConnPt != NULL)
|
|
{
|
|
hr = pConnPt->GetConnectionInterface(&siid);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (riid == siid)
|
|
{
|
|
*ppcp = (IConnectionPoint *)pConnPt;
|
|
(*ppcp)->AddRef();
|
|
hr = S_OK;
|
|
}
|
|
else
|
|
{
|
|
hr = ULS_E_NO_INTERFACE;
|
|
};
|
|
};
|
|
}
|
|
else
|
|
{
|
|
hr = ULS_E_NO_INTERFACE;
|
|
};
|
|
|
|
return hr;
|
|
}
|
|
|