864 lines
14 KiB
C++
864 lines
14 KiB
C++
/*++
|
||
|
||
© 1998 Seagate Software, Inc. All rights reserved
|
||
|
||
Module Name:
|
||
|
||
RmsObjct.cpp
|
||
|
||
Abstract:
|
||
|
||
Implementation of CRmsComObject
|
||
|
||
Author:
|
||
|
||
Brian Dodd [brian] 15-Nov-1996
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "stdafx.h"
|
||
|
||
#include "RmsObjct.h"
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
|
||
|
||
CRmsComObject::CRmsComObject(void)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
CRmsComObject constructor
|
||
|
||
Arguments:
|
||
|
||
None
|
||
|
||
Return Value:
|
||
|
||
None
|
||
|
||
--*/
|
||
{
|
||
// Default values
|
||
(void) CoCreateGuid( &m_objectId );
|
||
|
||
m_ObjectType = RmsObjectUnknown;
|
||
m_IsEnabled = TRUE;
|
||
m_State = 0;
|
||
m_StatusCode = S_OK;
|
||
m_Name = OLESTR("Object");
|
||
m_Description = OLESTR("");
|
||
|
||
memset( &m_Permit, 0, sizeof( SECURITY_DESCRIPTOR ) );
|
||
|
||
m_findBy = RmsFindByUnknown;
|
||
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CRmsComObject::CompareTo(
|
||
IN IUnknown *pCollectable,
|
||
OUT SHORT *pResult)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
CRmsComObject::CompareTo
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = E_FAIL;
|
||
SHORT result = 1;
|
||
|
||
WsbTraceIn( OLESTR("CRmsComObject::CompareTo"), OLESTR("") );
|
||
|
||
try {
|
||
|
||
// Validate arguments - Okay if pResult is NULL
|
||
WsbAssertPointer( pCollectable );
|
||
|
||
// We need the IRmsComObject interface to get the value of the object.
|
||
CComQIPtr<IRmsComObject, &IID_IRmsComObject> pObject = pCollectable;
|
||
WsbAssertPointer( pObject );
|
||
|
||
switch ( m_findBy ) {
|
||
|
||
case RmsFindByObjectId:
|
||
default:
|
||
{
|
||
GUID objectId;
|
||
|
||
// Get objectId.
|
||
WsbAffirmHr( pObject->GetObjectId( &objectId ));
|
||
|
||
if ( m_objectId == objectId ) {
|
||
|
||
// Object IDs match
|
||
hr = S_OK;
|
||
result = 0;
|
||
|
||
}
|
||
else {
|
||
hr = S_FALSE;
|
||
result = 1;
|
||
}
|
||
}
|
||
break;
|
||
|
||
}
|
||
|
||
}
|
||
WsbCatch( hr );
|
||
|
||
if ( SUCCEEDED(hr) && (0 != pResult) ){
|
||
*pResult = result;
|
||
}
|
||
|
||
WsbTraceOut( OLESTR("CRmsComObject::CompareTo"),
|
||
OLESTR("hr = <%ls>, result = <%ls>"),
|
||
WsbHrAsString( hr ), WsbPtrToShortAsString( pResult ) );
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CRmsComObject::GetSizeMax(
|
||
OUT ULARGE_INTEGER* pcbSize)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::GetSizeMax
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = E_NOTIMPL;
|
||
|
||
WsbTraceIn(OLESTR("CRmsComObject::GetSizeMax"), OLESTR(""));
|
||
|
||
// try {
|
||
// WsbAssert(0 != pcbSize, E_POINTER);
|
||
|
||
// // Get max size
|
||
// pcbSize->QuadPart = WsbPersistSizeOf(GUID) + // m_objectId
|
||
// WsbPersistSizeOf(LONG) + // m_findBy
|
||
// WsbPersistSizeOf(LONG) + // m_state
|
||
// WsbPersistSizeOf(HRESULT); // m_errCode
|
||
|
||
//// WsbPersistSizeOf(SECURITY_DESCRIPTOR); // m_permit
|
||
|
||
// } WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CRmsComObject::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pcbSize));
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CRmsComObject::Load(
|
||
IN IStream* pStream)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Load
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CRmsComObject::Load"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssertPointer( pStream );
|
||
|
||
USHORT usTemp;
|
||
ULONG ulTemp;
|
||
|
||
// Read value
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_objectId));
|
||
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &usTemp));
|
||
m_ObjectType = (RmsObject)usTemp;
|
||
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_IsEnabled));
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_State));
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &ulTemp));
|
||
m_StatusCode = (HRESULT)ulTemp;
|
||
|
||
m_Name.Free(); // Clean out any thing previously held
|
||
WsbAffirmHr(WsbBstrFromStream(pStream, &m_Name));
|
||
m_Description.Free();
|
||
WsbAffirmHr(WsbBstrFromStream(pStream, &m_Description));
|
||
|
||
// WsbAffirmHr(WsbLoadFromStream(pStream, &m_permit));
|
||
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &usTemp));
|
||
m_findBy = (RmsFindBy)usTemp;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
|
||
WsbTraceOut(OLESTR("CRmsComObject::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CRmsComObject::Save(
|
||
IN IStream* pStream,
|
||
IN BOOL clearDirty)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IPersistStream::Save
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
ULONG ulBytes = 0;
|
||
|
||
WsbTraceIn(OLESTR("CRmsComObject::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
|
||
|
||
try {
|
||
WsbAssertPointer( pStream );
|
||
|
||
// Read value
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_objectId));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, (USHORT) m_ObjectType));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_IsEnabled));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_State));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, (ULONG) m_StatusCode));
|
||
WsbAffirmHr(WsbBstrToStream(pStream, m_Name));
|
||
WsbAffirmHr(WsbBstrToStream(pStream, m_Description));
|
||
|
||
// WsbAffirmHr(WsbSaveToStream(pStream, m_permit));
|
||
|
||
WsbAffirmHr(WsbSaveToStream(pStream, (USHORT) m_findBy));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
|
||
WsbTraceOut(OLESTR("CRmsComObject::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CRmsComObject::Test(
|
||
OUT USHORT *pPassed,
|
||
OUT USHORT *pFailed)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IWsbTestable::Test
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
CComPtr<IRmsMediaSet> pMediaSet1;
|
||
CComPtr<IRmsMediaSet> pMediaSet2;
|
||
|
||
CComPtr<IPersistFile> pFile1;
|
||
CComPtr<IPersistFile> pFile2;
|
||
|
||
LONG i;
|
||
|
||
LONG longWork1;
|
||
LONG longWork2;
|
||
|
||
HRESULT hresultVal1 = 11111111;
|
||
HRESULT hresultWork1;
|
||
|
||
// SECURITY_DESCRIPTOR permitVal1;
|
||
// SECURITY_DESCRIPTOR permitWork1;
|
||
|
||
|
||
WsbTraceIn(OLESTR("CRmsComObject::Test"), OLESTR(""));
|
||
|
||
try {
|
||
// Get the MediaSet interface.
|
||
hr = S_OK;
|
||
try {
|
||
WsbAssertHr(((IUnknown*) (IRmsMediaSet*) this)->QueryInterface(IID_IRmsMediaSet, (void**) &pMediaSet1));
|
||
|
||
// Test SetState & GetState
|
||
for (i = RmsStateUnknown; i < RmsStateError; i++){
|
||
|
||
longWork1 = i;
|
||
|
||
SetState (longWork1);
|
||
|
||
GetState (&longWork2);
|
||
|
||
if (longWork1 == longWork2){
|
||
(*pPassed)++;
|
||
} else {
|
||
(*pFailed)++;
|
||
}
|
||
}
|
||
|
||
// Test GetErrCode
|
||
m_StatusCode = hresultVal1;
|
||
|
||
GetStatusCode(&hresultWork1);
|
||
|
||
if(hresultVal1 == hresultWork1){
|
||
(*pPassed)++;
|
||
} else {
|
||
(*pFailed)++;
|
||
}
|
||
|
||
// Test SetPermissions & GetPermissions
|
||
// SetPermissions(permitVal1);
|
||
|
||
// GetPermissions(&permitWork1);
|
||
|
||
// if((permitVal1 == permitWork1)){
|
||
// (*pPassed)++;
|
||
// } else {
|
||
// (*pFailed)++;
|
||
// }
|
||
|
||
} WsbCatch(hr);
|
||
|
||
// Tally up the results
|
||
|
||
hr = S_OK;
|
||
|
||
if (*pFailed) {
|
||
hr = S_FALSE;
|
||
}
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CRmsComObject::Test"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::InterfaceSupportsErrorInfo(
|
||
IN REFIID riid)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
ISupportsErrorInfo::InterfaceSupportsErrorInfo
|
||
|
||
--*/
|
||
{
|
||
static const IID* arr[] =
|
||
{
|
||
&IID_IRmsServer,
|
||
&IID_IRmsLibrary,
|
||
&IID_IRmsDriveClass,
|
||
&IID_IRmsCartridge,
|
||
&IID_IRmsDrive,
|
||
&IID_IRmsStorageSlot,
|
||
&IID_IRmsMediumChanger,
|
||
&IID_IRmsIEPort,
|
||
&IID_IRmsMediaSet,
|
||
&IID_IRmsRequest,
|
||
&IID_IRmsPartition,
|
||
&IID_IRmsComObject,
|
||
&IID_IRmsChangerElement,
|
||
&IID_IRmsDevice,
|
||
&IID_IRmsStorageInfo,
|
||
&IID_IRmsNTMS,
|
||
};
|
||
|
||
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
|
||
{
|
||
if (InlineIsEqualGUID(*arr[i],riid))
|
||
return S_OK;
|
||
}
|
||
return S_FALSE;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetObjectId(
|
||
OUT GUID *pObjectId)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetObjectId
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pObjectId );
|
||
|
||
*pObjectId = m_objectId;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetObjectId(
|
||
IN GUID objectId)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetObjectId
|
||
|
||
--*/
|
||
{
|
||
m_objectId = objectId;
|
||
return S_OK;
|
||
}
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetObjectType(
|
||
OUT LONG *pType)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetObjectType
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pType );
|
||
|
||
*pType = m_ObjectType;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetObjectType(
|
||
IN LONG type)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetObjectType
|
||
|
||
--*/
|
||
{
|
||
m_ObjectType = (RmsObject) type;
|
||
return S_OK;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::IsEnabled(void)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::IsEnabled
|
||
|
||
--*/
|
||
{
|
||
return (m_IsEnabled) ? S_OK : S_FALSE;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::Enable()
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::Enable
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
m_IsEnabled = TRUE;
|
||
WsbAffirmHr(SetStatusCode(S_OK));
|
||
|
||
// Log an Event
|
||
WsbLogEvent(RMS_MESSAGE_OBJECT_ENABLED, 0, NULL, (WCHAR *)m_Name, NULL );
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::Disable(
|
||
IN HRESULT reason)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::Disable
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
m_IsEnabled = FALSE;
|
||
WsbAffirmHr(SetStatusCode(reason));
|
||
|
||
// Log an Event
|
||
WsbLogEvent(RMS_MESSAGE_OBJECT_DISABLED, 0, NULL, (WCHAR *)m_Name, WsbHrAsString(reason), NULL );
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetState(
|
||
OUT LONG *pState)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetState
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pState );
|
||
|
||
*pState = m_State;
|
||
WsbTrace(OLESTR("GetState: Object <0x%08x> - Enabled = <%ls>; State = <%d>; StatusCode = <%ls>.\n"),
|
||
this, WsbBoolAsString(m_IsEnabled), m_State, WsbHrAsString(m_StatusCode));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetState(
|
||
IN LONG state)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetState
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
m_State = state;
|
||
WsbAffirmHr(SetStatusCode(S_OK));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetStatusCode(
|
||
OUT HRESULT *pResult)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetStatusCode
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pResult );
|
||
|
||
*pResult = m_StatusCode;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetStatusCode(
|
||
IN HRESULT result
|
||
)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetStatusCode
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
m_StatusCode = result;
|
||
WsbAffirmHr(adviseOfStatusChange());
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetName(
|
||
OUT BSTR *pName)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetName
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pName );
|
||
|
||
WsbAffirmHr( m_Name.CopyToBstr(pName) );
|
||
|
||
} WsbCatch( hr );
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetName(
|
||
IN BSTR name)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetName
|
||
|
||
--*/
|
||
{
|
||
m_Name = name;
|
||
return S_OK;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetDescription(
|
||
OUT BSTR *pDesc)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetDescription
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pDesc );
|
||
|
||
WsbAffirmHr( m_Name.CopyToBstr(pDesc) );
|
||
|
||
} WsbCatch( hr );
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetDescription(
|
||
IN BSTR desc)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetDescription
|
||
|
||
--*/
|
||
{
|
||
m_Description = desc;
|
||
return S_OK;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetPermissions(
|
||
OUT SECURITY_DESCRIPTOR *lpPermit)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetPermissions
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( lpPermit );
|
||
|
||
*lpPermit = m_Permit;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetPermissions(
|
||
IN SECURITY_DESCRIPTOR permit)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetPermissions
|
||
|
||
--*/
|
||
{
|
||
|
||
m_Permit = permit;
|
||
return S_OK;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::GetFindBy(
|
||
OUT LONG *pFindBy)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::GetFindBy
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAssertPointer( pFindBy );
|
||
|
||
*pFindBy = m_findBy;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
STDMETHODIMP
|
||
CRmsComObject::SetFindBy(
|
||
IN LONG findBy)
|
||
/*++
|
||
|
||
Implements:
|
||
|
||
IRmsComObject::SetFindBy
|
||
|
||
--*/
|
||
{
|
||
m_findBy = (RmsFindBy) findBy;
|
||
return S_OK;
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CRmsComObject::adviseOfStatusChange(void)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Notifies of object state changes.
|
||
|
||
Arguments:
|
||
|
||
None
|
||
|
||
Return Value:
|
||
|
||
S_OK - Success.
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
WsbTraceIn( OLESTR("CRmsComObject::adviseOfStatusChange"), OLESTR(""));
|
||
|
||
try {
|
||
CONNECTDATA pConnectData;
|
||
CComPtr<IConnectionPoint> pCP;
|
||
CComPtr<IConnectionPointContainer> pCPC;
|
||
CComPtr<IEnumConnections> pConnection;
|
||
CComPtr<IRmsSinkEveryEvent> pSink;
|
||
|
||
WsbTrace(OLESTR("Object <0x%08x> - Enabled = <%ls>; State = <%d>; StatusCode = <%ls>.\n"),
|
||
this, WsbBoolAsString(m_IsEnabled), m_State, WsbHrAsString(m_StatusCode));
|
||
|
||
// Tell everyone the new state of the object.
|
||
WsbAffirmHr(((IUnknown*)(IRmsComObject*) this)->QueryInterface(IID_IConnectionPointContainer, (void**) &pCPC));
|
||
WsbAffirmHr(pCPC->FindConnectionPoint(IID_IRmsSinkEveryEvent, &pCP));
|
||
WsbAffirmHr(pCP->EnumConnections(&pConnection));
|
||
|
||
while(pConnection->Next(1, &pConnectData, 0) == S_OK) {
|
||
|
||
try {
|
||
WsbAffirmHr((pConnectData.pUnk)->QueryInterface(IID_IRmsSinkEveryEvent, (void**) &pSink));
|
||
WsbAffirmHr(pSink->ProcessObjectStatusChange( m_IsEnabled, m_State, m_StatusCode ));
|
||
} WsbCatch(hr);
|
||
|
||
(pConnectData.pUnk)->Release();
|
||
pSink=0;
|
||
}
|
||
|
||
} WsbCatch(hr);
|
||
|
||
// We don't care if the sink has problems!
|
||
hr = S_OK;
|
||
|
||
WsbTraceOut(OLESTR("CRmsComObject::adviseOfStatusChange"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return hr;
|
||
} |